1. ホーム
  2. collections

[解決済み】KotlinのListに "add"、"remove "がない、Mapに "put "がないなど?

2022-04-05 16:37:19

質問

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

が見つからないというエラーが出ました。 addremove 関数から、List

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

Javaでできるような、キャストを必要としないListの使い方はないでしょうか?

どのように解決するのですか?

<ブロッククオート

多くの言語と異なり、Kotlinはmutableとimmutableのコレクション(リスト、セット、マップなど)を区別しています。コレクションをいつ編集できるかを正確に制御することは、バグをなくし、良い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() も動作するはずです。