在 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
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 中可以做的那样?
与许多语言不同,Kotlin 区分了可变集合和不可变集合(列表、集合、映射等)。精确控制何时可以编辑集合对于消除错误和设计良好的 API 很有用。
https://kotlinlang.org/docs/reference/collections.html
您需要使用MutableList列表。
MutableList
class TempClass { var myList: MutableList<Int> = mutableListOf<Int>() fun doSomething() { // myList = ArrayList<Int>() // initializer is redundant myList.add(10) myList.remove(10) } }
MutableList<Int> = arrayListOf()也应该工作。
MutableList<Int> = arrayListOf()