В Java мы могли бы сделать следующее
public class TempClass {
List<Integer> myList = null;
void doSomething() {
myList = new ArrayList<>();
myList.add(10);
myList.remove(10);
}
}
Но если мы перепишем его непосредственно в Котлин, как показано ниже
class TempClass {
var myList: List<Int>? = null
fun doSomething() {
myList = ArrayList<Int>()
myList!!.add(10)
myList!!.remove(10)
}
}
Я получил ошибку не найдя add
и remove
функции из моего списка
Я работаю вокруг приведения его к ArrayList, но это странно, когда требуется приведение, тогда как в Java приведение не требуется. И это побеждает цель наличия абстрактного класса List
class TempClass {
var myList: List<Int>? = null
fun doSomething() {
myList = ArrayList<Int>()
(myList!! as ArrayList).add(10)
(myList!! as ArrayList).remove(10)
}
}
Есть ли способ для меня использовать List, но не нужно его приводить, как то, что можно сделать в Java?
myList = null
а затем добавить вызов без!!
. Вы можете преодолеть это, используяlateinit
ключевое слово перед своим свойством, вот так:lateinit var myList: List<Int>
таким образом вам не нужно будет инициализировать список немедленно, но вы гарантируете компилятору, что инициализируете его перед первым использованием списка. Это более плавное решение, но оно возлагает на вас ответственность как разработчика.