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 üçüntypealiasistifadə olunur. - Konstruktorların şərh edilməsi: Bir sinfin əsas konstruktorunu şərh etmək üçün
constructoraç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) {
// ...
}
}