Yıldız projeksiyonu prensibi hakkında ne biliyorsunuz?
sobes.tech yapay zeka
AI'dan gelen yanıt
Kotlin'de Yıldız Projeksiyonu (Star Projection) prensibi, argümanın belirli bir türü önemli olmadığında, ancak tür güvenliğini sağlamak gerektiğinde güvenli bir şekilde jeneriklerin kullanılmasını sağlayan bir yöntemdir.
Aşağıdaki durumlarda uygulanır:
-
*:Any?ile eşdeğerdir. Argüman türünün bilinmediğini ve sınırları hakkında bilgi olmadığını gösterir. SadeceAny?örnekleri olan öğeleri okuyabilir ve null dışında hiçbir şeyi yazamazsınız.// Bilinmeyen türde listeden okuma fun readFromList(list: List<*>) { val item: Any? = list.firstOrNull() // Güvenle Any? olarak okunabilir } -
in *:in Nothingile eşdeğerdir. Kovaryant türler (out) için kullanılır, alt tür belirli değilse. Sadece öğe ekleyebilirsiniz (Nothing türü, bu imkansızdır), ancak okuyamazsınız.// Kovaryant türdeki listeye güvenli öğe ekleme imkansızdır fun addToList(list: MutableList<out *>) { // list.add(...) // Derleme hatası } -
out *:out Any?ile eşdeğerdir. Kontravarant türler (in) için kullanılır, üst tür belirli değilse. Sadece öğeleri okuyabilirsiniz (Any? gibi), yazamazsınız.// Kontravarant türdeki karşılaştırıcıdan okuma fun compare(comparator: Comparator<in *>) { // T türünü kabul etmeyen metodları çağırabilirsiniz // comparator.compare(obj1, obj2) // Tip dönüşümü olmadan derlenmez }
Yıldız projeksiyonlarının temel amacı, argümanın tam türü bilinmediğinde veya mevcut işlem için önemli olmadığında, jenerik sınıflar ve fonksiyonlarla güvenli etkileşim sağlamaktır. Bu, güvensiz dönüşümleri önlemeye ve tür güvenliğini korumaya yardımcı olur.
Kullanım örnekleri:
- Öğelerin varlığı önemli olan koleksiyonlarla çalışma, ancak belirli türleri önemli değildir.
- Jenerik nesneler için tür dönüşümleri.
- Raw türleri kullanan Java kodu ile birlikte çalışma.