CodeBlanks Logo Icon CodeBlanks

No-arg

no-arg compiler plugin'ını öğrenirsin.

No-arg plugin'i

no-arg plugin'i, belirli annotation'lara sahip sınıflar için sentetik argümansız kurucu ekler. Bu, JPA gibi framework'ler için gereklidir.

JPA'nın EntityManager'ı entity sınıflarını yansıtıcı (reflective) olarak oluştururken argümansız kurucu ister. Kotlin'de tüm parametreleri dolu bir sınıf yazıyorsan böyle bir kurucu yoktur. no-arg plugin'i @Entity gibi annotation'ları işaretler; derleme sırasında bu sınıflara görünmez bir no-arg kurucu ekler. Kodun değişmez ama bytecode'a kurucu yazılır. Bu sayede Hibernate ve EclipseLink sorunsuz çalışır.

No-arg örneği

Bu derste no-arg plugin'inin eklediği kurucuyu elle gösteriyoruz. Normalde plugin bunu bytecode'a yazar; kaynakta görünmez.

Örnek: class Entity { val id: Int = 0; constructor() }. Burada id varsayılan 0; argümansız kurucu da bunu kullanır. Entity() çağrısı bir örnek döndürür; id değeri 0 olur. JPA bu kurucuyu kullanarak entity'yi oluşturur, sonra id'yi veritabanından doldurur. Bu yapı, Kotlin + JPA projelerinde standarttır.

Uygulama Entity no-arg yaz

class Entity tanımla. val id: Int = 0 özelliği ve constructor() bildirimi olsun. main içinde val e = Entity() yapıp println(e.id) yaz.

Başlangıç kodu

Main.kt
// Entity sınıfını ekle (id özelliği ve constructor ile)

fun main() {
    // bir Entity oluştur ve id'sini yazdır
}

Örnek çözüm

Main.kt
class Entity {
    val id: Int = 0
    constructor()
}
fun main() {
    val e = Entity()
    println(e.id)
}

Beklenen çıktı

0

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 no-arg plugin'i ne zaman gerekir?

  • JPA gibi framework'ler entity'yi argümansız kurmak istediğinde Doğru cevap
  • Async metot yazmak için
  • Bir sınıfa annotation eklemek için
  • Coroutine başlatmak için

Açıklama: JPA entity'leri yansıtıcı olarak argümansız kurar; no-arg bunu sağlar.

2 Kurucu tanımını tamamla

Soru
class Entity {
    val id: Int = 0
    ____()
}
Cevap
class Entity {
    val id: Int = 0
    constructor()
}

Açıklama: constructor() ile argümansız kurucu tanımlanır.

3 No-arg parçalarını eşle

Kavram Anlamı
constructor() Argümansız kurucu
@Entity JPA annotation
val id = 0 Varsayılan değer
EntityManager JPA yöneticisi

Uzman bölümündeki tüm dersler