private val repositories = mutableListOf<String>()
private val repositories = ArrayList<String>()
Her ikisi de değiştirilebilir listedir, o zaman iki anahtar kelimenin amacı nedir mutableListOf
veya ArrayList
?
yoksa büyük bir fark var mı?
Yanıtlar:
İkisi arasındaki tek fark, niyetinizi iletmektir.
Eğer yazarken val a = mutableListOf()
, "Ben bir değişken listesini istiyorum, ve özellikle uygulanması umurumda değil" diyorsun. Bunun yerine yazarken val a = ArrayList()
"özellikle istiyorum" diyorsun ArrayList
.
Pratikte, Kotlin'in JVM'ye derlemesinin mevcut uygulamasında, çağırma bir mutableListOf
üretecektir ArrayList
ve davranışta hiçbir fark yoktur: liste oluşturulduktan sonra, her şey aynı şekilde davranacaktır.
Şimdi, Kotlin'in gelecekteki bir sürümünün mutableListOf
farklı bir liste türü döndürecek şekilde değiştiğini varsayalım .
Olmasındansa, Kotlin ekibi bu değişikliği ancak yeni uygulamanın çoğu kullanım durumu için daha iyi çalıştığını düşünürlerse yapacaktır. mutableListOf
o zaman bu yeni liste uygulamasını şeffaf bir şekilde kullanmanızı sağlar ve bu daha iyi davranışı ücretsiz olarak alırsınız. mutableListOf
Senin davan gibi geliyorsa devam et.
Öte yandan, belki de probleminiz hakkında düşünmek için epey zaman harcadınız ve bunun ArrayList
gerçekten probleminiz için en uygun olduğunu düşündünüz ve yetersiz bir şeye geçme riskini almak istemiyorsunuz. O zaman muhtemelen ya ArrayList
doğrudan kullanmak ya da arrayListOf
fabrika işlevini ( ArrayList
-özel bir analog'a mutableListOf
) kullanmak istersiniz .
mutableListOf<T>()
bir satır içi işlev çağrısıdır
MutableList<T>
. Bugün itibariyle, mutableListOf
bir örneğini döndürüyor ArrayList
.
ArrayList<String>()
yapıcı bir çağrıdır ve satır içi olamaz.
Başka bir deyişle, verilen:
val a = mutableListOf<String>()
val b = ArrayList<String>()
a
tipte MutableList<String>
b
tipte ArrayList<String>
Çalışma zamanında hem a
ve hem de b
bir örneğini tutar ArrayList
.
İle birleştirildiğinde Not inlining özellikle faydalı olduğu tipi şeyleşme gerekli kılan, listOf
, mutableListOf
gibi ve.
a
ve b
farklı bildirilmiş türe sahip - bu nedenle derleme zamanında bir fark var.
val b = arrayListOf<String>()
Kaynaklarda görebileceğiniz gibi :
public inline fun <T> mutableListOf(): MutableList<T> = ArrayList()
Yani, fark yok, sadece bir kolaylık yöntemi.
mutableListOf
neArrayList
de anahtar kelimeler