Sobes.tech
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çin typealias kullanılır.
  • Yapıcıya açıklama: Bir sınıfın ana yapıcısını açıklamak için constructor anahtar 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) {
        // ...
    }
}