No-arg
- Kotlin kursu
- Uzman
- Ders 17/47
- 5 dk
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
// 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
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
class Entity {
val id: Int = 0
____()
}
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 |