在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中可以做到的那样?
7 回答
https://kotlinlang.org/docs/reference/collections.html
您需要使用
MutableList
列表 .MutableList<Int> = arrayListOf()
也应该有效 .以不同方式在Kotlin中定义List集合:
或没有初始值 - 空列表和没有显式变量类型:
您可以将项目添加到列表中:
users.add(anohterUser)
或users += anotherUser
(引擎盖下是users.add(anohterUser)
)Mutable variable with immutable list:
或没有初始值 - 空列表和没有显式变量类型:
注意:您可以将*项添加到列表中:
users += anotherUser
- *它创建新的ArrayList并将其分配给users
Mutable variable with mutable list:
或没有初始值 - 空列表和没有显式变量类型:
注意:您可以将项目添加到列表中:
users.add(anohterUser)
但未使用
users += anotherUser
另见:https://kotlinlang.org/docs/reference/collections.html
显然,Kotlin的默认列表是不可变的 . 要拥有可以更改的List,应该使用MutableList,如下所示
Updated 但是,除非您真的想要更改列表,否则不建议使用MutableList . 关于只读集合如何提供更好的编码,请参阅https://hackernoon.com/read-only-collection-in-kotlin-leads-to-better-coding-40cdfa4c6359 .
https://kotlinlang.org/docs/reference/collections.html
根据以上链接,List <E>在Kotlin中是不可变的 . 不过这样可行:
同意上述所有使用MutableList的答案,但您也可以在List中添加/删除并获取如下新列表 .
要么
在不可变数据的概念中,也许这是一种更好的方法:
list
是immutable
byDefault
,您可以使用ArrayList
代替 . 像这样 :那么你可以
add/delete
这样的项目如下: