Sobes.tech
Middle

Quelles sont les caractéristiques du travail avec les annotations en Kotlin?

sobes.tech IA

Réponse de l'IA

Les annotations en Kotlin sont similaires à celles en Java, mais présentent plusieurs particularités:

  • Syntaxe : Les annotations sont placées avant l'élément auquel elles s'appliquent, sans le symbole @.
  • Utilisation en temps d'exécution : Par défaut, les annotations ne sont pas conservées en temps d'exécution. Pour les conserver, il faut utiliser la méta-anotation @Retention(AnnotationRetention.RUNTIME).
  • Application au type : Les annotations peuvent être appliquées non seulement aux classes, fonctions et propriétés, mais aussi aux types (par exemple, @NonNull String). Pour cela, on utilise typealias.
  • Annotation des constructeurs : Pour annoter le constructeur principal d'une classe, on utilise le mot-clé constructor. Pour les constructeurs secondaires, l'annotation est placée directement avant eux.
  • Annotation des propriétés et de leurs accesseurs : Les annotations peuvent être appliquées à la propriété elle-même, à son getter (@get:) ou à son setter (@set:).
  • Annotation des paramètres du constructeur pour les propriétés : Les annotations appliquées aux paramètres du constructeur principal, qui sont aussi des propriétés, annotent ces propriétés. Pour annoter le paramètre lui-même, on utilise @param:.
  • Annotation des paramètres de fonctions et méthodes : Les annotations sont placées directement avant le paramètre.
  • Travail avec les annotations en reflection : La reflection Kotlin (kotlin-reflect) permet d'obtenir des informations sur les annotations en temps d'exécution si @Retention(AnnotationRetention.RUNTIME) est utilisé.
  • Champ d'application : Les annotations peuvent avoir une déclaration de cible à l'aide de préfixes :
    • @file: - pour le fichier
    • @property: - pour la propriété
    • @field: - pour le champ généré pour la propriété
    • @get: - pour le getter de la propriété
    • @set: - pour le setter de la propriété
    • @param: - pour le paramètre du constructeur
    • @setparam: - pour le paramètre du setter de la propriété
    • @delegate: - pour le champ délégué
    • @use-site: - pour indiquer le site d'utilisation lorsque l'objectif n'est pas clairement spécifié

Exemple de création et d'utilisation d'une annotation :

// Définition de l'annotation
@Retention(AnnotationRetention.RUNTIME)
annotation class MyAnnotation(val value: String)

// Utilisation de l'annotation
@MyAnnotation("Hello")
class MyClass {

    @get:MyAnnotation("World")
    val myProperty: String = "some value"

    constructor(@param:MyAnnotation("ConstructorParam") param: Int) {
        // ...
    }

    fun myFunction(@MyAnnotation("FunctionParam") param: String) {
        // ...
    }
}