На 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 лиття не потрібно. І це перемагає мета створення абстрактного списку класів
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>
таким чином вам не потрібно буде ініціалізувати список негайно, але ви гарантуєте компілятору, що ви будете його ініціалізувати перед першим використанням списку. Це більш плавне рішення, але воно покладає на вас відповідальність як на розробника.