Yıldız proyeksiyası prinsipindən nə bilirsiniz?
sobes.tech Süni İntellekt
AI-dan cavab
Kotlin-də Ulduz Proyeksiyası (Star Projection) prinsipi, arqumentin konkret tipinin vacib olmadığı, lakin tip təhlükəsizliyinin təmin olunması lazım olduğu hallarda təhlükəsiz generik istifadəsidir.
Aşağıdakı hallarda tətbiq olunur:
-
*:Any?ilə bərabərdir. Arqumentin tipi məlum deyil və onun sərhədləri haqqında məlumat yoxdur. YalnızAny?nümunəsi olan elementləri oxumaq mümkündür və null-dan başqa heç nə yaza bilməzsiniz.// Məlum olmayan tipli siyahıdan oxuma fun readFromList(list: List<*>) { val item: Any? = list.firstOrNull() // Təhlükəsiz şəkildə `Any?` kimi oxumaq olar } -
in *:in Nothingilə bərabərdir. Kovariant tiplər (out) üçün istifadə olunur, aşağı tipin konkret tipi vacib deyil. Yalnız elementlər əlavə etmək mümkündür (tipo Nothing, bu isə mümkün deyil), lakin oxumaq mümkün deyil.// Kovariant tipli siyahıya təhlükəsiz element əlavə etmək mümkün deyil fun addToList(list: MutableList<out *>) { // list.add(...) // Kompilyasiya olunmayacaq } -
out *:out Any?ilə bərabərdir. Kontravarant tiplər (in) üçün istifadə olunur, yuxarı tip konkret deyil. Yalnız elementləri oxumaq mümkündür (Any? kimi), yazmaq mümkün deyil.// Kontravarant tipli müqayisəçi ilə oxuma fun compare(comparator: Comparator<in *>) { // T tipini qəbul etməyən metodları çağırmaq olar // comparator.compare(obj1, obj2) // Konversiya olmadan kompilyasiya olunmayacaq }
Ulduz proyeksiyalarının əsas məqsədi, arqumentin tam tipi məlum olmayan və ya cari əməliyyat üçün vacib olmayan hallarda, generik siniflər və funksiyalarla təhlükəsiz qarşılıqlı əlaqə qurmaqdır. Bu, təhlükəsiz olmayan cast-ləri qarşısını alır və tip təhlükəsizliyini qoruyur.
İstifadə nümunələri:
- Yalnız elementlərin mövcudluğu vacib olan kolleksiyalarla işləmək, lakin onların konkret tipi vacib deyil.
- Generik obyektlər üçün tip konvertasiyaları.
- Raw tipləri istifadə edən Java kodu ilə qarşılıqlı əlaqə.