小编典典

Kotlin 的列表缺少“添加”、“删除”、地图缺少“放置”等?

all

在 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 中可以做的那样?


阅读 133

收藏
2022-06-01

共1个答案

小编典典

与许多语言不同,Kotlin 区分了可变集合和不可变集合(列表、集合、映射等)。精确控制何时可以编辑集合对于消除错误和设计良好的 API 很有用。

https://kotlinlang.org/docs/reference/collections.html

您需要使用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()也应该工作。

2022-06-01