Dlaczego nie klasa w Kotlin
Array<T>
wdrożyć Iterable<T>
?Dlaczego nie Kotlin Array <T> wdrożyć iterowalny <T>
Szybkie spojrzenie na documentation ujawnia, że już ma on również metodę iterator()
.
Dlaczego nie klasa w Kotlin
Array<T>
wdrożyć Iterable<T>
?Dlaczego nie Kotlin Array <T> wdrożyć iterowalny <T>
Szybkie spojrzenie na documentation ujawnia, że już ma on również metodę iterator()
.
Kotlin został zaprojektowany do pełnej współpracy z Javą. Array<X>
jest X[]
zarówno w środowisku wykonawczym, jak i z punktu widzenia Java. Tablice Java nie implementują Iterable
, więc tablice Kotlin (które są praktycznie takie same) nie są tak dobre.
Możemy może sprawić, że nasze tablice implementują Iterable
, tworząc niezależną klasę, która nie dotyczy tablic Java. Aby zachować kompatybilność z Javą, musimy wykonać niejawne konwersje z tego typu na tablice Java iz powrotem. Konwersje niejawne nie są na ogół idealnym rozwiązaniem ze względu na obciążenie związane z wydajnością i niejasną semantykę obiektów. Tutaj również rozwiązaliby tylko połowę problemu, ponieważ nadal musielibyśmy ręcznie "blokować" tablice podczas wywoływania kodu Kotlin z Javy. Właśnie dlatego takie rozwiązanie nie zostało uznane za wykonalne.
Aby dodać: ['asIterable'] (https://kotlinlang.org/api/latest/jvm/stdlib /kotlin.collections/as-iterable.html) da ci otokowy obiekt, który jest "Iterable". –
Rozwiązaniem dla niemożności implementacji ogólnych funkcji tablic jest użycie interfejsu "Lista", gdy tylko jest to możliwe. – voddan