在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>
这样就不需要立即初始化列表,但是您可以向编译器保证在第一次使用列表之前将其初始化。这是一个更平滑的解决方案,但它给您作为开发人员的责任。