W Javie możemy wykonać następujące czynności
public class TempClass {
List<Integer> myList = null;
void doSomething() {
myList = new ArrayList<>();
myList.add(10);
myList.remove(10);
}
}
Ale jeśli przepiszemy go bezpośrednio do Kotlin, jak poniżej
class TempClass {
var myList: List<Int>? = null
fun doSomething() {
myList = ArrayList<Int>()
myList!!.add(10)
myList!!.remove(10)
}
}
Wystąpił błąd polegający na nie znalezieniu add
i remove
niedziałaniu z mojej listy
Pracuję nad rzutowaniem go na ArrayList, ale dziwne jest, że trzeba go rzutować, podczas gdy w Javie rzutowanie nie jest wymagane. I to przeczy celowi posiadania abstrakcyjnej listy klas
class TempClass {
var myList: List<Int>? = null
fun doSomething() {
myList = ArrayList<Int>()
(myList!! as ArrayList).add(10)
(myList!! as ArrayList).remove(10)
}
}
Czy jest jakiś sposób na użycie listy, ale nie muszę jej przesyłać, tak jak to można zrobić w Javie?
myList = null
a później dodaj bez połączenia!!
. Możesz temu zaradzić, używająclateinit
słowa kluczowego przed swoją właściwością wlateinit var myList: List<Int>
ten sposób : w ten sposób nie będziesz musiał natychmiast inicjować listy, ale gwarantujesz kompilatorowi, że zainicjujesz ją przed pierwszym użyciem listy. Jest to płynniejsze rozwiązanie, ale nakłada na ciebie odpowiedzialność jako programista.