Kotlin的名单缺少“添加”,“删除”等?
在Java中,我们可以做到以下几点
public class TempClass { List myList = null; void doSomething() { myList = new ArrayList(); myList.add(10); myList.remove(10); } }
但是如果我们直接把它改写成Kotlin如下
class TempClass { var myList: List? = null fun doSomething() { myList = ArrayList() myList!!.add(10) myList!!.remove(10) } }
我得到了没有find我的列表中add
和remove
function的错误
我将其转换为ArrayList,但这是奇怪的需要投它,而在Java铸造不是必需的。 而这就打破了抽象类List的目的
class TempClass { var myList: List? = null fun doSomething() { myList = ArrayList() (myList!! as ArrayList).add(10) (myList!! as ArrayList).remove(10) } }
有没有办法让我使用列表,但不需要投它,像什么可以在Java中做?
与许多语言不同,Kotlin区分了可变集合和不可变集合(列表,集合,映射等)。 精确控制集合何时编辑对于消除错误和设计良好的API非常有用。
https://kotlinlang.org/docs/reference/collections.html
你需要使用MutableList
列表。
class TempClass { var myList: MutableList = mutableListOf () fun doSomething() { // myList = ArrayList () // initializer is redundant myList.add(10) myList.remove(10) } }
MutableList
也应该工作。
显然Kotlin的默认列表是不可变的。 要有一个List可以改变,应该使用MutableList如下
class TempClass { var myList: MutableList? = null fun doSomething() { myList = ArrayList () myList!!.add(10) myList!!.remove(10) } }
更新尽管如此,不建议使用MutableList,除非您真的想要更改列表。 请参阅https://hackernoon.com/read-only-collection-in-kotlin-leads-to-better-coding-40cdfa4c6359了解只读集合如何提供更好的编码。
在不可变数据的概念中,也许这是一个更好的方法:
class TempClass { val list: List by lazy { listOf () } fun doSomething() { list += 10 list -= 10 } }
https://kotlinlang.org/docs/reference/collections.html
根据上面的链接列表
var list2 = ArrayList() list2.removeAt(1)
- 如何将java.util.stream.Stream 转换成kotlin.Sequence
- 运行Kotlin代码时,Android Studio会抛出java.lang.ClassNotFoundExceptionexception
- variables名称前的Kotlin星号运算符或Kotlin中的Spread运算符
- 如何使用kotlin显示在recyclerview中选择的单个项目
- 在Kotlin中导入嵌套的对象/对象函数
- 为什么公共课不能扩展私人课程?
- kotlin和ArgumentCaptor – IllegalStateException
- 在kotlinx.html DSL中写入原始html代码
- 我可以访问Kotlin中内联函数调用的“封闭”对象吗?