KAPT
- Kotlin kursu
- Uzman
- Ders 9/47
- 5 dk
KAPT annotation processing'i öğrenirsin.
KAPT nedir?
KAPT (Kotlin Annotation Processing Tool), Kotlin için eski annotation işleme yoludur. Kotlin kodunu önce Java'ya dönüştürür, sonra Java'nın annotation processor'ını çalıştırır.
KAPT, javax.annotation.processing.Processor arabirimini kullanır. Dagger, ButterKnife ve eski Room gibi kütüphaneler KAPT kullanır. Kotlin'i Java'ya dönüştürme adımı zaman alır; bu yüzden KAPT yavaştır. Yeni projelerde KSP önerilir. Eski bağımlılıklar nedeniyle KAPT hala gerekliyse kapt(...) bağımlılığı eklenir ve kapt plugin'i etkinleştirilir.
KAPT processor örneği
Bir KAPT processor'ı AbstractProcessor'dan türer ve process(annotations, roundEnv) metodunu uygular. Bu yapı Java'dan gelir.
Örnek: class EntityProcessor : AbstractProcessor() { override fun process(annotations: Set<TypeElement>, roundEnv: RoundEnvironment): Boolean { ... } }. Burada roundEnv üzerinden annotation'lı öğeler bulunur. İşleyici, her öğe için Filer ile kaynak dosyası yazar. Bu yapı Java standartlarına dayanır; Kotlin'e özgü değildir. Bu yüzden KSP, KAPT'den hem daha hızlı hem de Kotlin'e daha uygundur.
Uygulama KaptProcessor yaz
KaptProcessor sınıfı tanımla. fun process(annotations: List<String>) metodu, her annotation için println("apt: $it") çağrısı yapsın. main içinde listOf("Entity", "Dao") ile çağır.
Başlangıç kodu
// KaptProcessor sınıfını ekle
fun main() {
KaptProcessor().process(listOf("Entity", "Dao"))
}Örnek çözüm
class KaptProcessor {
fun process(annotations: List<String>) {
for (it in annotations) println("apt: $it")
}
}
fun main() {
KaptProcessor().process(listOf("Entity", "Dao"))
}Beklenen çıktı
apt: Entity apt: Dao
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 KAPT parçalarını eşle
| Kavram | Anlamı |
|---|---|
KAPT |
Eski işleme yolu |
javax.annotation.processing |
Java APT arabirimi |
kapt plugin |
Gradle eklentisi |
kapt(...) |
Bağımlılık |
2 KAPT neden yavaştır?
- Reflection kullanır
- Coroutine başlatır
- Her seferinde ağ bağlantısı açar
- Kotlin'i önce Java'ya dönüştürür Doğru cevap
Açıklama: KAPT, Kotlin'i Java'ya dönüştürme adımı yüzünden yavaştır.
3 KAPT processor sınıfını tamamla
class EntityProcessor : ____() {
override fun process(annotations: Set<TypeElement>, roundEnv: RoundEnvironment): Boolean {
return true
}
}
class EntityProcessor : AbstractProcessor() {
override fun process(annotations: Set<TypeElement>, roundEnv: RoundEnvironment): Boolean {
return true
}
}
Açıklama: KAPT processor'ları AbstractProcessor'dan türer.