companion ve interface
- Kotlin kursu
- Orta seviye
- Ders 33/116
- 5 dk
companion object ile interface uygulama öğrenirsin.
companion object ve interface
Bir companion object bir arabirimi uygulayabilir. Bu, sınıfın kendisi için bir fabrika olarak davranmasını sağlar; arabirim referansı üzerinden çağrılabilir.
Örnek: interface Factory<T> { fun create(): T }; class User(val name: String) { companion object : Factory<User> { override fun create() = User("misafir") } }. Burada User.create() bir User döndürür. Ayrıca val f: Factory<User> = User yazılabilir; companion object kendisi bir nesnedir. Bu, bağımlılık enjeksiyonu ve test edilebilirlik için yararlıdır.
Factory<T> arabirimi
Bir Factory<T> arabirimi, bir tür üreten metodu tanımlar. Sınıfın companion object'i bu arabirimi uygulayarak fabrika rolü üstlenir.
Örnek: interface Factory<T> { fun create(): T }. User sınıfı companion object : Factory<User> { override fun create() = User("misafir") } ile uygular. User.create().name çağrısı misafir döndürür. Generic fabrika arabirimi, farklı sınıfların ortak bir sözleşmeyle örnek üretmesini sağlar. Testlerde sahte fabrika geçmek kolaylaşır.
Uygulama Factory<T> uygulayan companion object
Factory<T> adında generic bir arabirim tanımla; fun create(): T metodu olsun. User(val name: String) sınıfı tanımla; companion object : Factory<User> ile uygulayıp override fun create() = User("misafir") yaz. main içinde User.create().name değerini println ile yazdır.
Başlangıç kodu
// Factory<T> generic arabirimi tanımı
// User sınıfı ve sınıf içi blok ile uygula
// main'de create çağır ve name'i yazdırÖrnek çözüm
interface Factory<T> {
fun create(): T
}
class User(val name: String) {
companion object : Factory<User> {
override fun create() = User("misafir")
}
}
fun main() {
println(User.create().name)
}Beklenen çıktı
misafir
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Bir companion object'in arabirim uygulaması ne sağlar?
- Sınıfın birden çok örnek oluşturması
- Sınıf adının arabirim referansına atanması Doğru cevap
- Kalıtım zinciri kısaltması
- Soyut metotların silinmesi
Açıklama: companion object bir arabirim uygulayınca sınıf adı arabirim referansına atanabilir.
2 companion + interface parçalarını eşle
| Kavram | Anlamı |
|---|---|
interface Factory<T> |
Arabirim tanımı |
companion object : Factory<User> |
Uygulama |
override fun create |
Metot uygulama |
User.create() |
Fabrika çağrısı |
3 companion + interface tanımını tamamla
class User(val name: String) {
companion object : ____<User> {
override fun create() = User("misafir")
}
}
class User(val name: String) {
companion object : Factory<User> {
override fun create() = User("misafir")
}
}
Açıklama: companion object : Factory<User> ile arabirim uygulanır.