【发布时间】:2016-10-21 03:53:13
【问题描述】:
在 Java 中,我们可以执行以下操作
public class TempClass {
List<Integer> myList = null;
void doSomething() {
myList = new ArrayList<>();
myList.add(10);
myList.remove(10);
}
}
但是如果我们像下面这样直接重写成Kotlin
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>这样您就不需要立即初始化列表,但您向编译器保证您将在使用列表之前对其进行初始化第一次。这是一个更顺畅的解决方案,但它让您作为开发人员承担责任。
标签: collections kotlin