Kotlin - 10 - Sınıf Tipleri
Data Class:
İş gerçekleştirmekten ziyade veri (Data) tutmak için
oluşturduğumuz sınıflardır. Kotlinde bu tarz sınıfları sadece “class” yerine “data
class” olarak iaretlersek, compiler birincil oluşturucu method’ u baz alarak aşağıdakileri
tüm tanımlı özellikler için otomatik olarak oluşturur.
- Equals() / hasCode()
- toString() (“User(name=John, age=42)” şeklinde)
- componentN() fonksiyonlar
- copy() (bazı değerlerini koruyaran ufakdeğişikle kopyasını yaratır)
Tutarlılığı sağlamak ve anlamlı olması adına Data
sınıflarının tanımı için şunlar gerekir:
- Birincil oluşturucu method (primary constructor) en azından 1 parametre içermeli.
- Tüm birincil oluşturucu parametreleri “var” veya “val” olarak işaretlenmeli.
- Data sınıfları abstract, open, sealed veya inner olamaz.
Ve sadece interface implement edebilirler. (1.1 ile bu durum
değişti artık class ta implente edilebilir)
- Equals(), hasCode(), toString() için oluşturulmuş bir kod varsa compiler bunu oluşturmaz.
- Eğer süper class componentN() içeriyorsa compiler ezebilirse bunu ezer yoksa hata bildirir
- ComponentN() ve copy() methodları için ise tanıma müsaade etmez.
Eğer oluşturulan sınıf için JVM tarafında parametresiz
constructor gerekiyorsa tüm parametreler definition esnasında default değer ile
tanımlanmalıdır.
“Pair” ve “Triple” desteklenir. Çoğunlukla isimli veri
sınıfları okunabilirlik için daha iyi çözümdür.
Enum ve Sealed Class:
Temel olarak Enum ve sealed class bir birine oldukça yakın
ve sınırlı set içinden değer alabilir. Ancak aradaki temel fark Enum tek
instance olabilir iken sealed tan birçok instance oluşturulabilir.
Enum Example:
Sealed Class:
Constructor ı private olmak zorunda, subclass ları aynı
dosyada olmalı ve default olarak abstract tır.
Nested ve Inner Class:
Nested class lar bir member dır, ancak ana class’a erişim sağlayamaz, bu
noktada “Nested” yerine “Inner” yerine keyword’ü ile inner class yaratırsanız
ana class için referansa sahip olursunuz. Çağırım şeklindede ufak bir farklılık
oluşuyor, bu konu için örneği incelemekte fayda var.
Yorumlar
Yorum Gönder