Cet article présente principalement l'explication détaillée et les exemples des classes d'annotation de Kotlin. Les amis qui en ont besoin peuvent se référer aux
Explications détaillées de Kotlin et exemples de classes d'annotation
. Déclaration d'annotation
Les annotations sont un moyen d'attacher des métadonnées à votre code. Pour déclarer une annotation, placez le modificateur d'annotation devant la classe :
annotation class Fancy
Des propriétés supplémentaires de l'annotation peuvent être spécifiées en annotant la classe d'annotation avec une méta- annotation :
@Target précise les types possibles d'éléments pouvant être annotés avec cette annotation (classe, fonction, attribut, expression,
- @Retention spécifie si l'annotation est stockée dans le fichier de classe compilé et si elle peut être visible par réflexion au moment de l'exécution (la valeur par défaut est vraie @Repeatable Permet d'utiliser plusieurs fois la même annotation sur un seul élément
- @MustBe
- Document
ed précise que l'annotation fait partie de l'API publique ; et doit être inclus dans la signature In générée de la classe ou de la méthode, comme indiqué dans la documentation de l'API.
(AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.VALUE_PARAMETER, AnnotationTarget.EXPRESSION)
@ Rétention
(AnnotationRetention.SOURCE)@MustBeDocumented
@Fancy class Foo { @Fancy fun baz(@Fancy foo: Int): Int { return (@Fancy 1) } }constructeur principal
de la classe, vous devez ajouter le mot-clé constructor dans le constructeur déclaration , et ajoutez l'annotation devant :
class Foo @Inject constructor(dependency: MyDependency) { // …… }
class Foo { var x: MyDependency? = null @Inject set }Constructeur
L'annotation peut avoir un constructeur qui accepte des paramètres.
annotation class Special(val why: String) @Special("example") class Foo {}
- Les types correspondant aux types natifs Java (Int, Long etc. .);
- Chaîne Énumération
Tableau des types répertoriés ci-dessus.
- Les paramètres d'annotation ne peuvent pas avoir de types nullables car la JVM ne prend pas en charge le stockage de null comme valeur des propriétés d'annotation.
- Si une annotation est utilisée comme paramètre d'une autre annotation, son nom n'est pas préfixé par le caractère @ :
Si une classe a besoin à préciser Pour les paramètres annotés, utilisez les classes Kotlin (KClass). Le compilateur Kotlin le convertira automatiquement en classe Java afin que le code Java puisse voir normalement l'annotation et les paramètres.
annotation class ReplaceWith(val expression: String) annotation class Deprecated( val message: String, val replaceWith: ReplaceWith = ReplaceWith("")) @Deprecated("This function is deprecated, use === instead", ReplaceWith("this === other"))Expression Lambda L'annotation
peut également être utilisée pour les expressions lambda. Ils sont appliqués à la méthode Invoke() qui génère le corps de l'expression lambda. Ceci est utile pour les frameworks comme Quasar, qui utilisent des annotations pour le contrôle de concurrence.
import kotlin.reflect.KClass annotation class Ann(val arg1: KClass<*>, val arg2: KClass<out Any?>) @Ann(String::class, Int::class) class MyClass
Cible d'utilisation de l'annotation
Lors de l'annotation de propriétés ou de
paramètres de fonction
annotation class Suspendable val f = @Suspendable { Fiber.sleep(10) }
class Example(@field:Ann val foo, // 标注 Java 字段 @get:Ann val bar, // 标注 Java getter @param:Ann val quux) // 标注 Java 构造函数参数
sont :
@file:JvmName("Foo") package org.jetbrains.demofichier
class Example { @set:[Inject VisibleForTesting] var collaborator: Collaborator }propriété (avec annotation pour cette cible invisible pour Java)
- field
- get (getter de propriété)
- set (setter de propriété)
- receiver (paramètre récepteur de la fonction ou de la propriété d'extension)
- param (paramètre constructeur)
- setparam ( paramètre de définition de propriété)
- delegate (champ pour une propriété de délégué pour stocker son instance de délégué)
Pour annoter le paramètre de récepteur de une fonction d'extension, utilisez la syntaxe suivante :
-
Si vous ne spécifiez pas de cible, elle est basée sur l'annotation @Target de l'annotation utilisée. votre cible. S'il existe plusieurs cibles applicables, la première cible applicable de la liste suivante est utilisée :
param
property
field
Java 注解
Java 注解与 Kotlin 100% 兼容:
import org.junit.Test import org.junit.Assert.* import org.junit.Rule import org.junit.rules.* class Tests { // 将 @Rule 注解应用于属性 getter @get:Rule val tempFolder = TemporaryFolder() @Test fun simple() { val f = tempFolder.newFile() assertEquals(42, getTheAnswer()) } }
因为 Java 编写的注解没有定义参数顺序,所以不能使用常规函数调用 语法来传递参数。相反,你需要使用命名参数语法。
// Java public @interface Ann { int intValue(); String stringValue(); } // Kotlin @Ann(intValue = 1, stringValue = "abc") class C
就像在 Java 中一样,一个特殊的情况是 value 参数;它的值无需显式名称指定。
// Java public @interface AnnWithValue { String value(); } // Kotlin @AnnWithValue("abc") class C
如果 Java 中的 value 参数具有数组类型,它会成为 Kotlin 中的一个 vararg 参数:
// Java public @interface AnnWithArrayValue { String[] value(); } // Kotlin @AnnWithArrayValue("abc", "foo", "bar") class C
对于具有数组类型的其他参数,你需要显式使用 arrayOf:
// Java public @interface AnnWithArrayMethod { String[] names(); } // Kotlin @AnnWithArrayMethod(names = arrayOf("abc", "foo", "bar")) class C
注解实例的值会作为属性暴露给 Kotlin 代码。
// Java public @interface Ann { int value(); } // Kotlin fun foo(ann: Ann) { val i = ann.value }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

MinGW - GNU minimaliste pour Windows
Ce projet est en cours de migration vers osdn.net/projects/mingw, vous pouvez continuer à nous suivre là-bas. MinGW : un port Windows natif de GNU Compiler Collection (GCC), des bibliothèques d'importation et des fichiers d'en-tête librement distribuables pour la création d'applications Windows natives ; inclut des extensions du runtime MSVC pour prendre en charge la fonctionnalité C99. Tous les logiciels MinGW peuvent fonctionner sur les plates-formes Windows 64 bits.

Dreamweaver CS6
Outils de développement Web visuel

mPDF
mPDF est une bibliothèque PHP qui peut générer des fichiers PDF à partir de HTML encodé en UTF-8. L'auteur original, Ian Back, a écrit mPDF pour générer des fichiers PDF « à la volée » depuis son site Web et gérer différentes langues. Il est plus lent et produit des fichiers plus volumineux lors de l'utilisation de polices Unicode que les scripts originaux comme HTML2FPDF, mais prend en charge les styles CSS, etc. et présente de nombreuses améliorations. Prend en charge presque toutes les langues, y compris RTL (arabe et hébreu) et CJK (chinois, japonais et coréen). Prend en charge les éléments imbriqués au niveau du bloc (tels que P, DIV),

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP