Middle
Kotlinдеги annotations менен иштөө өзгөчөлүктөрү кандай?
sobes.tech AI
AIден жооп
Котлинде аннотациялар Javaдагы аннотацияларга окшош, бирок алардын бир катар өзгөчөлүктөрү бар:
- Синтаксис: Аннотациялар колдонулуп жаткан элементтин алдында коюлат,
@белгиси жок. - Run-time колдонуу: Дефолт боюнча аннотациялар run-timeте сакталбайт. Сактоо үчүн
@Retention(AnnotationRetention.RUNTIME)мета-аннотациясын колдонуу керек. - Тиркөө түрү: Аннотацияларды гана класстарга, функцияларга жана мүлктөргө эмес, ошондой эле типтерге (
@NonNull Stringсыяктуу) колдонсо болот. Бул үчүнtypealiasколдонулат. - Конструкторду белгилөө: Негизги конструкторду белгилөө үчүн
constructorачкыч сөзү колдонулат. Экинчи конструкторлорго аннотация түздөн-түз алардын алдында коюлат. - Мүлктөр жана алардын аксессорлоруна белгилөө: Аннотацияларды мүлккө, анын getterине (
@get:) же setterине (@set:) колдонсо болот. - Конструктордун параметрлерине белгилөө: Негизги конструктордун параметрлерине колдонулган аннотациялар ошол мүлктөрдү белгилейт. Бул үчүн
@param:колдонулат. - Функциялар жана методдордун параметрлерине белгилөө: Аннотациялар параметрдин алдында турат.
- Reflection менен иштөө: Kotlin reflection (
kotlin-reflectкитепканасы)@Retention(AnnotationRetention.RUNTIME)шартында аннотациялар тууралуу маалыматты алууга мүмкүндүк берет. - Колдонуу чөйрөсү: Аннотациялар максаттуу жарыялануусу менен белгиленет:
@file:- файл үчүн@property:- мүлк үчүн@field:- мүлк үчүн түзүлгөн талаа@get:- мүлктүн getter үчүн@set:- мүлктүн setter үчүн@param:- конструктордун параметри үчүн@setparam:- мүлктүн setter параметри үчүн@delegate:- делегат талаа үчүн@use-site:- колдонуу жерлери үчүн, максат так аныктоо кыйын болгон учурда
Мисал түзүү жана колдонуу:
// Аннотацияны аныктоо
@Retention(AnnotationRetention.RUNTIME)
annotation class MyAnnotation(val value: String)
// Аннотацияны колдонуу
@MyAnnotation("Hello")
class MyClass {
@get:MyAnnotation("World")
val myProperty: String = "кээ бир мааниси"
constructor(@param:MyAnnotation("ConstructorParam") param: Int) {
// ...
}
fun myFunction(@MyAnnotation("FunctionParam") param: String) {
// ...
}
}