Sobes.tech
Middle

Mik a Kotlinban az annotációkkal való munka jellemzői?

sobes.tech MI

Válasz az MI-től

A Kotlinban a megjegyzések hasonlóak a Java-ban található megjegyzésekhez, de néhány jellemzővel rendelkeznek:

  • Szintaxis: A megjegyzéseket az alkalmazott elem elé helyezzük, @ szimbólum nélkül.
  • Használat futási időben: Alapértelmezés szerint a megjegyzések nem maradnak meg futási időben. A megőrzéshez a @Retention(AnnotationRetention.RUNTIME) meta-annotációt kell használni.
  • Alkalmazás típusokra: A megjegyzéseket nemcsak osztályokra, függvényekre és tulajdonságokra lehet alkalmazni, hanem típusokra is (például, @NonNull String). Ehhez a typealias használható.
  • Konstruktorok megjegyzése: A fő konstruktor megjegyzéséhez a constructor kulcsszót használjuk. Másodlagos konstruktorok esetén a megjegyzés közvetlenül előttük kerül elhelyezésre.
  • Tulajdonságok és azok hozzáférői megjegyzése: A megjegyzéseket a tulajdonságra, annak getterére (@get:) vagy setterére (@set:) lehet alkalmazni.
  • Konstruktor paramétereinek megjegyzése: A fő konstruktor paramétereire alkalmazott megjegyzések ezeknek a tulajdonságoknak a megjegyzését is jelentik. A paraméter megjegyzéséhez a @param: használható.
  • Függvények és metódusok paramétereinek megjegyzése: A megjegyzéseket közvetlenül a paraméter előtt helyezzük el.
  • A megjegyzésekkel való munka reflectionben: A Kotlin reflection (kotlin-reflect) lehetővé teszi a megjegyzések információinak futási időben történő lekérését, ha a @Retention(AnnotationRetention.RUNTIME) van használatban.
  • Alkalmazási terület: A megjegyzések célkitűzése célzott kijelölése prefixek segítségével történhet:
    • @file: - a fájlhoz
    • @property: - a tulajdonsághoz
    • @field: - a tulajdonsághoz generált mezőhöz
    • @get: - a tulajdonság getteréhez
    • @set: - a tulajdonság setteréhez
    • @param: - a konstruktor paraméteréhez
    • @setparam: - a tulajdonság setter paraméteréhez
    • @delegate: - a delegált mezőhöz
    • @use-site: - a használati hely megjelöléséhez, amikor a cél nem egyértelmű

A megjegyzés létrehozásának és használatának példája:

// Megjegyzés meghatározása
@Retention(AnnotationRetention.RUNTIME)
annotation class MyAnnotation(val value: String)

// Megjegyzés használata
@MyAnnotation("Hello")
class MyClass {

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

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

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