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)
}
}
Javaで実行できるような、Listを使用する方法をキャストする必要がない方法はありますか?
myList = null
と、その後の呼び出しなしでの追加なし!!
。lateinit
プロパティの前で次のようにキーワードを使用することで、これを克服できます。これによりlateinit var myList: List<Int>
、リストをすぐに初期化する必要はありませんが、リストを初めて使用する前に初期化することをコンパイラに保証できます。これはよりスムーズなソリューションですが、開発者としての責任があります。