private val repositories = mutableListOf<String>()
private val repositories = ArrayList<String>()
どちらも変更可能なリストですが、2つのキーワードのmutableListOf
意味はArrayList
何ですか?
または大きな違いはありますか?
回答:
2つの違いは、意図を伝えることだけです。
と書くときはval a = mutableListOf()
、「変更可能なリストが必要です。実装については特に気にしません」と言っています。代わりにval a = ArrayList()
、あなたが書くときは、「私は特にArrayList
。
実際には、JVMにコンパイルするKotlinの現在の実装では、呼び出しmutableListOf
によってが生成さArrayList
れ、動作に違いはありません。リストが作成されると、すべてが同じように動作します。
さて、Kotlinの将来のバージョンではmutableListOf
、異なるタイプのリストを返すように変更するとします。
ほとんどの場合、Kotlinチームは、新しい実装がほとんどのユースケースでより適切に機能すると判断した場合にのみ、その変更を行います。mutableListOf
次に、その新しいリストの実装を透過的に使用してもらい、無料でそのより良い動作を取得します。mutableListOf
それがあなたのケースのように聞こえるなら、行きなさい。
一方、問題について考えるのにArrayList
かなりの時間を費やし、それが本当に問題に最も適していると考え、最適でないものに移動するリスクを冒したくない場合があります。次にArrayList
、直接使用するか、arrayListOf
ファクトリー関数(の-にArrayList
類似したものmutableListOf
)を使用する必要があります。
mutableListOf<T>()
はを返すインライン関数呼び出しです
MutableList<T>
。今日の時点でmutableListOf
は、のインスタンスが返されますArrayList
。
ArrayList<String>()
コンストラクター呼び出しであり、インライン化できません。
言い換えれば、
val a = mutableListOf<String>()
val b = ArrayList<String>()
a
タイプです MutableList<String>
b
タイプです ArrayList<String>
実行時には、両方a
とb
のインスタンスを保持しますArrayList
。
組み合わせた場合にインライン化することは特に有用であることに留意されたい型具体化の存在を正当化、listOf
、mutableListOf
などが挙げられます。
a
そして、b
異なる宣言された型を持っている-ので、コンパイル時に違いがあります。
val b = arrayListOf<String>()
ソースで見ることができるように:
public inline fun <T> mutableListOf(): MutableList<T> = ArrayList()
したがって、違いはなく、単に便利な方法です。
mutableListOf
もArrayList
キーワードはKotlinである