Middle
Kokios yra darbo su anotacijomis Kotlin'e savybės?
sobes.tech AI
Atsakymas iš AI
Kotlin anotacijos yra panašios į Java anotacijas, tačiau turi keletą ypatybių:
- Sintaksė: Anotacijos dedamos prieš elementą, prie kurio jos taikomos, be
@ženklo. - Naudojimas run-time: Pagal numatytuosius nustatymus anotacijos run-time'e nėra saugomos. Norint jas išsaugoti, reikia naudoti meta-anotaciją
@Retention(AnnotationRetention.RUNTIME). - Taikymas tipui: Anotacijos galima taikyti ne tik klasėms, funkcijoms ir savybėms, bet ir tipams (pvz.,
@NonNull String). Tam naudojamastypealias. - Konstruktoriaus anotavimas: Pagrindiniam konstruktoriui anotaciją taikyti naudojamas žodis
constructor. Anotacija tiesiogiai prieš jį. - Savybių ir jų accessor'ų anotavimas: Anotacijos gali būti taikomos pačiai savybei, jos getter'ui (
@get:) arba setter'ui (@set:). - Konstruktoriaus parametrų anotavimas: Anotacijos, taikomos pagrindinio konstruktoriaus parametrams, anotuoja šiuos parametrus. Tam naudojamas
@param:. - Funkcijų ir metodų parametrų anotavimas: Anotacijos taikomos tiesiog prieš parametrą.
- Reflection naudojimas: Kotlin reflection (knygynas
kotlin-reflect) leidžia gauti informaciją apie anotacijas run-time, jei naudojama@Retention(AnnotationRetention.RUNTIME). - Taikymo sritis: Anotacijos gali turėti tikslinį deklaravimą su prefiksais:
@file:- failui@property:- savybei@field:- laukui, kuris sugeneruotas savybei@get:- getter'ui@set:- setter'ui@param:- konstruktoriaus parametrui@setparam:- savybės setter'io parametrui@delegate:- delegato laukui@use-site:- naudojimo vietai, kai tikslią vietą sunku tiksliai nurodyti
Pavyzdys sukūrimo ir naudojimo:
// Anotacijos apibrėžimas
@Retention(AnnotationRetention.RUNTIME)
annotation class MyAnnotation(val value: String)
// Anotacijos naudojimas
@MyAnnotation("Hello")
class MyClass {
@get:MyAnnotation("World")
val myProperty: String = "koks nors reikšmė"
constructor(@param:MyAnnotation("ConstructorParam") param: Int) {
// ...
}
fun myFunction(@MyAnnotation("FunctionParam") param: String) {
// ...
}
}