Чӣ гуна истифода бурдани ёддоштҳо дар Kotlin?
sobes.tech AI
Ҷавоб аз AI
Аннотацияҳо дар Kotlin барои илова кардани маълумоти мета ба синфҳо, хусусиятҳо, функсияҳо, изразҳо ва параметрҳо истифода мешаванд. Онҳо амалҳои мустақимро иҷро намекунанд, аммо метавонанд аз ҷониби компилятор, рамкаҳо ё китобхонаҳои дигар барои коркарди гуногун истифода шаванд.
Аспектҳои асосии истифода:
-
Синтаксис: Аннотацияҳо пеш аз унсуре, ки ба он татбиқ мешаванд, дар зикрҳои кунҷӣ
@ҷойгир карда мешаванд. Агар аннотация параметр дошта бошад, онҳо дар зикрҳои баъд аз ном дар зикрҳо нишон дода мешаванд.@Deprecated("Use newFunction instead") fun oldFunction() { // ... } @JvmStatic fun staticMethod() { // ... } -
Татбиқ ба унсурҳои гуногун: Аннотацияҳо метавонанд ба:
- Синфҳо (
class):@Serializable class User(val name: String) - Хусусиятҳо (
val,var):@Inject lateinit var userRepository: UserRepository - Функсияҳо (
fun):@Test fun testSomething() { // ... } - Параметрҳои конструкторҳо/функсияҳо:
fun processUser(@NotNull user: User) { // ... } - Изразҳо:
fun calculate(@Ignore parameter: Int) { // ... } - Намудҳо (
@Target(AnnotationTarget.TYPE)):val list: @NotNull List<String> = emptyList()
- Синфҳо (
-
Ҷоҳои истифода (Use-site Targets): Барои тафовут додан ба он ки аннотация ба кадом унсур татбиқ мешавад, вақте ки чандин ҳаст (масалан, майдону геттер), use-site targets истифода мешаванд.
Target Тавсиф @file:Ба тамоми файл татбиқ мешавад @property:Ба тамоми хусусият татбиқ мешавад @field:Ба майдони backing (пешбар) татбиқ мешавад @get:Ба геттери хусусият татбиқ мешавад @set:Ба сеттери хусусият татбиқ мешавад @param:Ба параметри конструктор/функсия татбиқ мешавад @setparam:Ба параметри сеттер татбиқ мешавад @delegate:Ба намунаи хусусияти делегат татбиқ мешавад @receiver:Ба навъи қабулкунанда татбиқ мешавад class Example(@field:Inject val dependency: Dependency) { // @field:Inject ба майдони 'dependency' татбиқ мешавад } -
Эълони аннотацияҳои худ: Аннотацияҳои шахсӣ бо калиди
annotation classэълон карда мешаванд. Параметрҳои аннотация метавонанд намудҳои primitives, сатрҳо, синфҳо (KClass), enumeration, дигар аннотацияҳо ё массивҳои ин намудҳоро дошта бошанд.annotation class MyAnnotation(val value: String, val count: Int = 0) @MyAnnotation("Hello", count = 5) class AnnotatedClass { // ... } -
Аннотацияҳои мета: Аннотацияҳо метавонанд бо мета-аннотацияҳо ишора шаванд, ки рафтор ва истифодаи онҳоро муайян мекунанд.
@Target: нишон медиҳад, ки кадом унсурҳо метавонанд аннотатсия шаванд.@Retention: нишон медиҳад, ки дар кадом марҳилаи ҳаёти онҳо мавҷуд бошанд (SOURCE,BINARY,RUNTIME).@Repeatable: имкон медиҳад, ки як аннотация чанд маротиба ба як унсур татбиқ шавад.@MustBeDocumented: нишон медиҳад, ки аннотация бояд қисми API-и умумӣ бошад, ки воситаҳои ҳуҷҷатгузорӣ мебаранд.
@Target(AnnotationTarget.CLASS, AnnotationTarget.FUNCTION) @Retention(AnnotationRetention.RUNTIME) annotation class ProcessedByFramework
Аннотацияҳо дар Kotlin барои ҳамгироӣ бо рамкаҳои JVM (Spring, Android), сериализатсия (Kotlinx.serialization), озмоишҳо (JUnit) ва эҷоди китобхонаҳои шахсӣ, ки асос ёфтаанд ба мета-маълумот, васеъ истифода мешаванд.