Sobes.tech
Junior — Middle

Kotlin'deki jeneriklerdeki değişmezlik kavramını açıklayın ve neden kullanıldığını belirtin

sobes.tech yapay zeka

AI'dan gelen yanıt

Kotlin'de değişmezlik, eğer Generic<T> adlı genel bir türünüz varsa, Generic<A> ve Generic<B>'nin kalıtım ilişkisiyle bağlı olmadığını ifade eder, hatta A B'nin alt tipi olsa bile. Yani, Generic<A> Generic<B>'nin alt tipi değildir ve tersi de geçerlidir.

Bu, değiştirilebilir veri yapılarıyla çalışırken tür hatalarını önlemek için önemlidir. Örneğin, MutableList<String> bir MutableList<Any> alt türü olsaydı, listeye başka bir türden nesne eklenebilir ve bu da tür güvenliğini ihlal ederdi.

Kotlin'de, değiştirilebilir koleksiyonlar ve içeriklerin değiştirilebildiği diğer türler için varsayılan olarak invariyantlık kullanılır. Daha fazla esneklik için, kovaryantlık (out) ve kontravaryantlık (in) mevcuttur ve bu, belirli durumlarda türleri güvenli bir şekilde genişletmeye veya daraltmaya olanak tanır.

İşte invariyant bir tür örneği:

class Box<T>(var value: T)

val boxString: Box<String> = Box("metin")
// val boxAny: Box<Any> = boxString // Derleme hatası: Box<String> `Box<Any>`'nin alt türü değildir.

Bu şekilde, invariyantlık, genel türlerle çalışırken katı tür güvenliğini korumaya yardımcı olur.