Middle
Kotlin'de açıklamalarla çalışmanın özellikleri nelerdir?
sobes.tech yapay zeka
AI'dan gelen yanıt
Kotlin'deki açıklamalar Java'daki açıklamalara benzese de birkaç özelliği vardır:
- Sözdizimi: Açıklamalar, uygulandıkları öğenin önüne
@sembolü olmadan konur. - Çalışma zamanında kullanımı: Varsayılan olarak, açıklamalar çalışma zamanında saklanmaz. Saklamak için
@Retention(AnnotationRetention.RUNTIME)meta-anotasyonu kullanılmalıdır. - Türlere uygulanması: Açıklamalar sadece sınıflara, fonksiyonlara ve özelliklere değil, aynı zamanda türlere de uygulanabilir (örneğin,
@NonNull String). Bunun içintypealiaskullanılır. - Yapıcıya açıklama: Bir sınıfın ana yapıcısını açıklamak için
constructoranahtar kelimesi kullanılır. İkincil yapıcılar için açıklama doğrudan önlerine konur. - Özellikler ve erişimcilerine açıklama: Açıklamalar, özelliğe, onun getter'ına (
@get:) veya setter'ına (@set:) uygulanabilir. - Yapıcı parametrelerine açıklama: Ana yapıcı parametrelerine uygulanan açıklamalar, bu özellikleri de açıklamaktadır. Bu parametreyi açıklamak için
@param:kullanılır. - Fonksiyon ve metod parametrelerine açıklama: Doğrudan parametreden önce konur.
- Reflection ile açıklamalar: Kotlin reflection (
kotlin-reflect) kullanılarak,@Retention(AnnotationRetention.RUNTIME)ile belirtilmişse, çalışma zamanında açıklamalar hakkında bilgi alınabilir. - Kullanım alanı: Açıklamalar, hedef belirteci ile ön ekler kullanılarak belirlenebilir:
@file:- dosya için@property:- özellik için@field:- özellik için oluşturulan alan için@get:- özellik getter'ı için@set:- özellik setter'ı için@param:- yapıcı parametresi için@setparam:- özellik setter parametresi için@delegate:- delege alanı için@use-site:- kullanım yeri belirtmek için, hedef açıkça belirtilmediğinde
Örnek: Bir açıklama tanımlama ve kullanma:
// Anotasyon tanımı
@Retention(AnnotationRetention.RUNTIME)
annotation class MyAnnotation(val value: String)
// Anotasyon kullanımı
@MyAnnotation("Hello")
class MyClass {
@get:MyAnnotation("World")
val myProperty: String = "some value"
constructor(@param:MyAnnotation("ConstructorParam") param: Int) {
// ...
}
fun myFunction(@MyAnnotation("FunctionParam") param: String) {
// ...
}
}