在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)
    }
}

我得到的错误,没有找到添加和删除函数从我的列表

我把它强制转换为数组列表,但强制转换是奇怪的,而在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中可以做的那样?


当前回答

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

根据上面的链接列表<E>在Kotlin中是不可变的。 然而,这是可行的:

var list2 = ArrayList<String>()
list2.removeAt(1)

其他回答

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

根据上面的链接列表<E>在Kotlin中是不可变的。 然而,这是可行的:

var list2 = ArrayList<String>()
list2.removeAt(1)

默认情况下,列表是不可变的,您可以使用ArrayList代替。像这样:

 val orders = arrayListOf<String>()

然后你可以像下面这样添加/删除项目:

orders.add("Item 1")
orders.add("Item 2")

默认情况下,ArrayList是可变的,所以你可以对它执行操作。

同意以上所有使用MutableList的答案,但你也可以从列表中添加/删除,并获得如下所示的新列表。

val newListWithElement = existingList + listOf(element)
val newListMinusElement = existingList - listOf(element)

Or

val newListWithElement = existingList.plus(element)
val newListMinusElement = existingList.minus(element)

在Kotlin中,你必须使用可变列表或数组列表。

让我们看看MutableList的方法是如何工作的:

var listNumbers: MutableList<Int> = mutableListOf(10, 15, 20)
// Result: 10, 15, 20

listNumbers.add(1000)
// Result: 10, 15, 20, 1000

listNumbers.add(1, 250)
// Result: 10, 250, 15, 20, 1000

listNumbers.removeAt(0)
// Result: 250, 15, 20, 1000

listNumbers.remove(20)
// Result: 250, 15, 1000

for (i in listNumbers) { 
    println(i) 
}

让我们看看ArrayList的方法是如何工作的:

var arrayNumbers: ArrayList<Int> = arrayListOf(1, 2, 3, 4, 5)
// Result: 1, 2, 3, 4, 5

arrayNumbers.add(20)
// Result: 1, 2, 3, 4, 5, 20

arrayNumbers.remove(1)
// Result: 2, 3, 4, 5, 20

arrayNumbers.clear()
// Result: Empty

for (j in arrayNumbers) { 
    println(j) 
}

你可以像这样创建一个新的。

var list1 = ArrayList<Int>()
var list2  = list1.toMutableList()
list2.add(item)

现在你可以使用list2了,谢谢。