Hogyan használjuk az annotációkat Kotlinben?
sobes.tech MI
Válasz az MI-től
A Kotlinban az annotációkat meta-információk hozzáadására használják osztályokhoz, tulajdonságokhoz, függvényekhez, kifejezésekhez és paraméterekhez. Nem hajtanak végre közvetlen műveletet, de fordító, keretrendszerek vagy más könyvtárak által különböző feldolgozásokhoz használhatók.
Főbb felhasználási szempontok:
-
Szintaxis: Az annotációkat az elem előtt helyezzük el, szögletes zárójelek között
@jellel. Ha az annotációnak paraméterei vannak, azok a név után zárójelben szerepelnek.@Deprecated("Use newFunction instead") fun oldFunction() { // ... } @JvmStatic fun staticMethod() { // ... } -
Alkalmazás különböző elemekre: Az annotációk alkalmazhatók:
- Osztályokra (
class):@Serializable class User(val name: String) - Tulajdonságokra (
val,var):@Inject lateinit var userRepository: UserRepository - Függvényekre (
fun):@Test fun testSomething() { // ... } - Konstruktor és függvény paraméterekre:
fun processUser(@NotNull user: User) { // ... } - Kifejezésekre:
fun calculate(@Ignore parameter: Int) { // ... } - Típusokra (
@Target(AnnotationTarget.TYPE)):val list: @NotNull List<String> = emptyList()
- Osztályokra (
-
Alkalmazási helyek (Use-site Targets): Az annotáció alkalmazásának pontos helyének diszambiguálására, ha több helyen is alkalmazható (pl. mező és getter), use-site targets használhatók.
Target Leírás @file:Az egész fájlra alkalmazva @property:Az egész tulajdonságra alkalmazva @field:A backing field-re alkalmazva @get:A tulajdonság getterére alkalmazva @set:A tulajdonság setterére alkalmazva @param:A konstruktor vagy függvény paraméterére alkalmazva @setparam:A setter paraméterére alkalmazva @delegate:A delegált tulajdonság példányára alkalmazva @receiver:A fogadó típusára alkalmazva class Example(@field:Inject val dependency: Dependency) { // @field:Inject alkalmazva a 'dependency' mezőre } -
Saját annotációk deklarálása: Saját annotációk
annotation classkulcsszóval deklarálhatók. Az annotáció paraméterei primitív típusok, stringek, osztályok (KClass), enumok, más annotációk vagy ezek tömbjei lehetnek.annotation class MyAnnotation(val value: String, val count: Int = 0) @MyAnnotation("Hello", count = 5) class AnnotatedClass { // ... } -
Meta-annotációk: Az annotációkat meta-annotációkkal lehet ellátni, amelyek meghatározzák viselkedésüket és alkalmazhatóságukat.
@Target: Megadja, mely elemek annotálhatók.@Retention: Megadja, hogy az annotáció melyik életciklusban legyen jelen (SOURCE,BINARY,RUNTIME).@Repeatable: Lehetővé teszi ugyanazon annotáció többszöri alkalmazását.@MustBeDocumented: Megadja, hogy az annotációnak része legyen a nyilvános API-nak, amit dokumentációs eszközök generálnak.
@Target(AnnotationTarget.CLASS, AnnotationTarget.FUNCTION) @Retention(AnnotationRetention.RUNTIME) annotation class ProcessedByFramework
Az annotációk széles körben használatosak Kotlinben JVM keretrendszerekkel (Spring, Android), szériázásnál (Kotlinx.serialization), tesztelésnél (JUnit) és saját könyvtárak létrehozásánál, meta-információkra alapozva.