Sobes.tech
Junior

Kotlin'de nasıl anotasyonlar kullanılır?

sobes.tech yapay zeka

AI'dan gelen yanıt

Kotlin'deki anotasyonlar, sınıflara, özelliklere, fonksiyonlara, ifadelere ve parametrelere meta bilgi eklemek için kullanılır. Doğrudan bir işlem yapmazlar, ancak derleyici, çerçeveler veya diğer kütüphaneler tarafından çeşitli işlemler için kullanılabilirler.

Kullanımın temel yönleri:

  1. Sözdizimi: Anotasyonlar, uygulandıkları öğenin önüne @ ile konur. Eğer anotasyonun parametreleri varsa, isimlerinden sonra parantez içinde belirtilir.

    @Deprecated("Yerine newFunction kullan")
    fun oldFunction() {
        // ...
    }
    
    @JvmStatic
    fun staticMethod() {
        // ...
    }
    
  2. Farklı öğelere uygulama: Anotasyonlar şu öğelere uygulanabilir:

    • Sınıflar (class):
      @Serializable
      class User(val name: String)
      
    • Özellikler (val, var):
      @Inject
      lateinit var userRepository: UserRepository
      
    • Fonksiyonlar (fun):
      @Test
      fun testSomething() {
          // ...
      }
      
    • Yapıcı/işlev parametreleri:
      fun processUser(@NotNull user: User) {
          // ...
      }
      
    • İfadeler:
      fun calculate(@Ignore parameter: Int) {
          // ...
      }
      
    • Tipler (@Target(AnnotationTarget.TYPE)):
      val list: @NotNull List<String> = emptyList()
      
  3. Uygulama yerleri (Use-site Targets): Birden fazla durumda (örneğin, alan ve getter) anotasyonun hangi öğeye uygulandığını ayırt etmek için use-site targets kullanılır.

    Target Açıklama
    @file: Tüm dosyaya uygulanır
    @property: Özelliğin tamamına uygulanır
    @field: Backing alanına uygulanır
    @get: Özelliğin getter'ına uygulanır
    @set: Özelliğin setter'ına uygulanır
    @param: Yapıcı fonksiyon parametresine uygulanır
    @setparam: Setter parametresine uygulanır
    @delegate: Delegasyonlu özelliğin örneğine uygulanır
    @receiver: Alıcı tipine uygulanır
    class Example(@field:Inject val dependency: Dependency) {
        // @field:Inject, 'dependency' alanına uygulanır
    }
    
  4. Kullanıcı tanımlı anotasyonların bildirimi: Kendi anotasyonlarınız annotation class anahtar kelimesiyle tanımlanır. Anotasyon parametreleri primitif tipler, dizeler, sınıflar (KClass), enumlar, diğer anotasyonlar veya bu tiplerin dizileri olabilir.

    annotation class MyAnnotation(val value: String, val count: Int = 0)
    
    @MyAnnotation("Merhaba", count = 5)
    class AnnotatedClass {
        // ...
    }
    
  5. Meta-anotasyonlar: Anotasyonlar, davranışlarını ve uygulanabilirliklerini belirleyen meta-anotasyonlarla işaretlenebilir.

    • @Target: Hangi öğelerin anotasyon alabileceğini belirtir.
    • @Retention: Anotasyonun yaşam döngüsünün hangi aşamasında olduğunu belirtir (SOURCE, BINARY, RUNTIME).
    • @Repeatable: Aynı anotasyonun birden çok kez uygulanmasına izin verir.
    • @MustBeDocumented: Anotasyonun, belge oluşturma araçları tarafından üretilen API'nin bir parçası olması gerektiğini belirtir.
    @Target(AnnotationTarget.CLASS, AnnotationTarget.FUNCTION)
    @Retention(AnnotationRetention.RUNTIME)
    annotation class ProcessedByFramework
    

Kotlin'de anotasyonlar, JVM çerçeveleriyle entegrasyon (Spring, Android), serileştirme (Kotlinx.serialization), test (JUnit) ve meta bilgiye dayalı kendi kütüphanelerinin oluşturulması için yaygın olarak kullanılır.