Kuidas kasutada annotatsioone Kotlinis?
sobes.tech AI
Vastus AI-lt
Kotlinis anotatsioonid kasutatakse metaandmete lisamiseks klassidele, omadustele, funktsioonidele, väljenditele ja parameetritele. Need ei täida otsest tegevust, kuid võivad olla kasutusel kompilaatorite, raamistike või teiste teekide poolt erinevate töötlemiste jaoks:
Peamised kasutusvaldkonnad:
-
Süntaks: Anotatsioonid märgivad elementi enne, millele need rakenduvad, nurksulgudes
@. Kui anotatsioonil on parameetrid, märgitakse need pärast nime sulgudes:@Deprecated("Use newFunction instead") fun oldFunction() { // ... } @JvmStatic fun staticMethod() { // ... } -
Rakendamine erinevatele elementidele: Anotatsioone saab rakendada:
- Klassidele (
class):@Serializable class User(val name: String) - Omadustele (
val,var):@Inject lateinit var userRepository: UserRepository - Funktsioonidele (
fun):@Test fun testSomething() { // ... } - Konstruktorite/funktsioonide parameetritele:
fun processUser(@NotNull user: User) { // ... } - Väljenditele:
fun calculate(@Ignore parameter: Int) { // ... } - Tüüpidele (
@Target(AnnotationTarget.TYPE)):val list: @NotNull List<String> = emptyList()
- Klassidele (
-
Kasutuspaigad (Use-site Targets): Kui on vaja täpsustada, millele täpselt anotatsioon rakendub, kui neid on mitu (näiteks väli ja getter), kasutatakse use-site targets:
Target Kirjeldus @file:Rakendub kogu failile @property:Rakendub kogu omadusele @field:Rakendub tagasituleva väljale (backing field) @get:Rakendub omaduse getter'ile @set:Rakendub omaduse setter'ile @param:Rakendub konstruktorile/funktsiooni parameetrile @setparam:Rakendub omaduse setter'i parameetrile @delegate:Rakendub delegeeritud omaduse instantsile @receiver:Rakendub vastuvõtja tüübile class Example(@field:Inject val dependency: Dependency) { // @field:Inject rakendub 'dependency' väljale } -
Kasutaja määratletud anotatsioonid: Oma anotatsioone defineeritakse
annotation classabil. Anotatsiooni parameetrid võivad olla primitiivsed tüübid, stringid, klassid (KClass), nimekirjad, teised anotatsioonid või nende massiivid:annotation class MyAnnotation(val value: String, val count: Int = 0) @MyAnnotation("Hello", count = 5) class AnnotatedClass { // ... } -
Meta-anotatsioonid: Anotatsioonid võivad olla märgitud meta-anotatsioonidega, mis määravad nende käitumise ja rakendatavuse:
@Target: näitab, millised elemendid võivad olla anotatsiooniga märgitud.@Retention: näitab, millal on anotatsioon olemas (SOURCE,BINARY,RUNTIME).@Repeatable: võimaldab rakendada anotatsiooni mitu korda ühe elemendi kohta.@MustBeDocumented: näitab, et anotatsioon peab olema osa avalikust API-st, mida dokumenteerimisvahend genereerib.
@Target(AnnotationTarget.CLASS, AnnotationTarget.FUNCTION) @Retention(AnnotationRetention.RUNTIME) annotation class ProcessedByFramework
Anotatsioonid on laialdaselt kasutusel Kotlinis JVM-i raamistikus (Spring, Android), serialiseerimises (Kotlinx.serialization), testimises (JUnit) ja oma teekide loomisel, mis põhinevad metaandmetel.