Kako koristiti anotacije u Kotlinu?
sobes.tech АИ
Одговор од АИ
Anotacije u Kotlin-u se koriste za dodavanje meta-informacija klasama, svojstvima, funkcijama, izrazima i parametrima. One ne izvršavaju direktnu akciju, ali mogu biti korišćene od strane kompajlera, okvira ili drugih biblioteka za razne obrade.
Glavni aspekti korišćenja:
-
Sintaksa: Anotacije se navode pre elementa na koji se primenjuju, u uglastim zagradama
@. Ako anotacija ima parametre, oni se navode u zagradama nakon imena.@Deprecated("Use newFunction instead") fun oldFunction() { // ... } @JvmStatic fun staticMethod() { // ... } -
Primena na različite elemente: Anotacije se mogu primenjivati na:
- Klase (
class):@Serializable class User(val name: String) - Svojstva (
val,var):@Inject lateinit var userRepository: UserRepository - Funkcije (
fun):@Test fun testSomething() { // ... } - Parametre konstruktora/funkcija:
fun processUser(@NotNull user: User) { // ... } - Izraze:
fun calculate(@Ignore parameter: Int) { // ... } - Tipove (
@Target(AnnotationTarget.TYPE)):val list: @NotNull List<String> = emptyList()
- Klase (
-
Mesta primene (Use-site Targets): Za disambiguaciju toga na kojem elementu se primenjuje anotacija, kada ih ima više (npr. polje i getter), koriste se use-site targets.
Target Opis @file:Primjenjuje se na cijeli fajl @property:Primjenjuje se na cijelu svojstvo @field:Primjenjuje se na backing field @get:Primjenjuje se na getter svojstva @set:Primjenjuje se na setter svojstva @param:Primjenjuje se na parametar konstruktora ili funkcije @setparam:Primjenjuje se na parametar seta @delegate:Primjenjuje se na instancu delegirane svojstva @receiver:Primjenjuje se na tip primaoca class Example(@field:Inject val dependency: Dependency) { // @field:Inject se primjenjuje na polje 'dependency' } -
Definisanje sopstvenih anotacija: Sopstvene anotacije se definišu ključnom reči
annotation class. Parametri anotacije mogu biti primitivni tipovi, stringovi, klase (KClass), enumi, druge anotacije ili nizovi ovih tipova.annotation class MyAnnotation(val value: String, val count: Int = 0) @MyAnnotation("Hello", count = 5) class AnnotatedClass { // ... } -
Meta-anotacije: Anotacije mogu biti označene meta-anotacijama koje definišu njihovo ponašanje i primenjivost.
@Target: Navodi koje elemente mogu anotirati.@Retention: Navodi u kojoj fazi životnog ciklusa anotacija postoji (SOURCE,BINARY,RUNTIME).@Repeatable: Omogućava primenu anotacije više puta na isti element.@MustBeDocumented: Navodi da anotacija treba biti deo javnog API-ja koji generišu alati za dokumentaciju.
@Target(AnnotationTarget.CLASS, AnnotationTarget.FUNCTION) @Retention(AnnotationRetention.RUNTIME) annotation class ProcessedByFramework
Anotacije se široko koriste u Kotlinu za integraciju sa JVM okvirima (Spring, Android), serializaciju (Kotlinx.serialization), testiranje (JUnit) i kreiranje sopstvenih biblioteka zasnovanih na meta-informacijama.