Kotlin'de ArrayList <String> () ve mutableListOf <String> () arasındaki fark


103
private val repositories = mutableListOf<String>()

private val repositories = ArrayList<String>()

Her ikisi de değiştirilebilir listedir, o zaman iki anahtar kelimenin amacı nedir mutableListOfveya ArrayList?

yoksa büyük bir fark var mı?


6
Kotlin'de mutableListOfne ArrayListde anahtar kelimeler
Ilya

Yanıtlar:


145

İ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 ArrayListve 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 mutableListOffarklı 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. mutableListOfo zaman bu yeni liste uygulamasını şeffaf bir şekilde kullanmanızı sağlar ve bu daha iyi davranışı ücretsiz olarak alırsınız. mutableListOfSenin 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 ArrayListdoğrudan kullanmak ya da arrayListOffabrika işlevini ( ArrayList-özel bir analog'a mutableListOf) kullanmak istersiniz .


22

mutableListOf<T>()bir satır içi işlev çağrısıdır MutableList<T>. Bugün itibariyle, mutableListOfbir ö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 ave hem de bbir örneğini tutar ArrayList.

İle birleştirildiğinde Not inlining özellikle faydalı olduğu tipi şeyleşme gerekli kılan, listOf, mutableListOfgibi ve.


2
Yani hiçbir fark yok.
Sai

3
ave bfarklı bildirilmiş türe sahip - bu nedenle derleme zamanında bir fark var.
miensol

Satır olarak satır içine alınabilirval b = arrayListOf<String>()
Vlad

8

Kaynaklarda görebileceğiniz gibi :

public inline fun <T> mutableListOf(): MutableList<T> = ArrayList()

Yani, fark yok, sadece bir kolaylık yöntemi.


1
Ve tırnak içine "kolaylık" koyardım. MutableList aslında farklı bir uygulamaya sahip olana kadar , başka bir çekirdek nesneyle aynı şeyi yapan bir çekirdek nesne sağlamak kafa karıştırıcıdır ve hiç de kolay değildir. :(
Mike Williamson
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.