companion extension
- Kotlin kursu
- Orta seviye
- Ders 39/116
- 5 dk
companion object'e extension ekleme öğrenirsin.
companion extension
Bir companion extension, bir sınıfın companion object'ine extension function ekler. fun ClassName.Companion.method() biçiminde yazılır. Sınıf adıyla statik gibi çağrılır.
Örnek: fun User.Companion.default(): User { return User("misafir") }. Bu extension User.default() olarak çağrılır. Sınıfın kendi companion object'ini değiştirmeden fabrika metotları ve yardımcılar eklenebilir. Özellikle sınıfın kaynak koduna dokunamadığımız durumlarda kullanışlıdır. Companion referansı companion object'in varsayılan adıdır.
default fabrika metodu
Bir companion extension ile bir sınıfa dışarıdan fabrika metodu eklenebilir. Companion referansı alıcı tür olarak yazılır.
Örnek: fun User.Companion.default(): User { return User("misafir") }. User.default() çağrısı User("misafir") döndürür. Bu yöntem, sınıf tanımını değiştirmeden fabrika metotları eklemenin yoludur. Özellikle üçüncü taraf kütüphane sınıfları için yararlıdır. Companion extension'ın gövdesinde this companion object'i ifade eder.
Uygulama User.Companion.default extension'ı
User(val name: String) sınıfı tanımla; companion object bloğu olsun (boş olabilir). fun User.Companion.default(): User extension fonksiyonu tanımla; gövdesi User("misafir") döndürsün. main içinde User.default().name değerini println ile yazdır.
Başlangıç kodu
// User sınıfı tanımı ve sınıf içi singleton bloğu
// Companion referansı ile default extension tanımı
// main'de default çağır ve name'i yazdırÖrnek çözüm
class User(val name: String) {
companion object
}
fun User.Companion.default(): User {
return User("misafir")
}
fun main() {
println(User.default().name)
}Beklenen çıktı
misafir
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Bir <strong>companion extension</strong> nasıl çağrılır?
- Sınıf örneği üzerinden
- Yalnızca alt sınıftan
- Sınıf adıyla doğrudan Doğru cevap
- Yeni bir object ile
Açıklama: companion extension sınıf adıyla doğrudan çağrılır.
2 companion extension parçalarını eşle
| Kavram | Anlamı |
|---|---|
ClassName.Companion |
Alıcı referansı |
fun User.Companion.default |
Extension tanımı |
User.default() |
Çağrı |
User("misafir") |
Dönüş değeri |
3 companion extension tanımını tamamla
fun User.____.default(): User {
return User("misafir")
}
fun User.Companion.default(): User {
return User("misafir")
}
Açıklama: Companion referansı companion object'i işaret eder.