Sobes.tech
Middle

Kotlin-də şərhlərlə işləməyin xüsusiyyətləri nələrdir?

sobes.tech Süni İntellekt

AI-dan cavab

Kotlin-də şərhlər Java-dakı şərhlərə bənzəyir, lakin bir sıra xüsusiyyətlərə malikdir:

  • Sintaksis: Şərhlər tətbiq olunduğu elementdən əvvəl yerləşdirilir, @ simvolu olmadan.
  • İcra zamanı istifadə: Standart olaraq, şərhlər icra zamanı saxlanmır. Onları saxlamaq üçün @Retention(AnnotationRetention.RUNTIME) meta-şərhindən istifadə etmək lazımdır.
  • Növə tətbiq: Şərhlər yalnız siniflərə, funksiyalara və xüsusiyyətlərə deyil, həm də tiplərə tətbiq oluna bilər (məsələn, @NonNull String). Bunun üçün typealias istifadə olunur.
  • Konstruktorların şərh edilməsi: Bir sinfin əsas konstruktorunu şərh etmək üçün constructor açar sözü istifadə olunur. İkincil konstruktorlar üçün şərh birbaşa onların əvvəlində yerləşdirilir.
  • Xüsusiyyətlər və onların accessor-larına şərh: Şərhlər, xüsusiyyətə, onun getter-ına (@get:) və ya setter-ə (@set:) tətbiq oluna bilər.
  • Konstruktor parametrlərinə şərh: Əsas konstruktor parametrlərinə tətbiq olunan şərhlər, bu xüsusiyyətləri də şərh edir. Bu parametri şərh etmək üçün @param: istifadə olunur.
  • Funksiya və metod parametrlərinə şərh: Şərhlər birbaşa parametrin əvvəlində yerləşdirilir.
  • Reflection ilə işləmə: Kotlin reflection (kotlin-reflect) istifadə edərək, @Retention(AnnotationRetention.RUNTIME) istifadə olunursa, icra zamanı şərhlər haqqında məlumat əldə etmək mümkündür.
  • Tətbiq sahəsi: Şərhlər, məqsədi dəqiq göstərmək üçün prefikslər vasitəsilə hədəf elan edə bilər:
    • @file: - fayl üçün
    • @property: - xüsusiyyət üçün
    • @field: - xüsusiyyət üçün yaradılmış sahə üçün
    • @get: - xüsusiyyətin getter-i üçün
    • @set: - xüsusiyyətin setter-i üçün
    • @param: - konstruktor parametri üçün
    • @setparam: - xüsusiyyətin setter parametri üçün
    • @delegate: - nümayəndə sahəsi üçün
    • @use-site: - istifadə yerini göstərmək üçün, məqsəd aydın göstərilə bilmədikdə

Nümunə: Anotasiya yaratmaq və istifadə etmək:

// Anotasiya təyini
@Retention(AnnotationRetention.RUNTIME)
annotation class MyAnnotation(val value: String)

// Anotasiya istifadəsi
@MyAnnotation("Hello")
class MyClass {

    @get:MyAnnotation("World")
    val myProperty: String = "some value"

    constructor(@param:MyAnnotation("ConstructorParam") param: Int) {
        // ...
    }

    fun myFunction(@MyAnnotation("FunctionParam") param: String) {
        // ...
    }
}