private val repositories = mutableListOf<String>()
private val repositories = ArrayList<String>()
Keduanya adalah daftar yang bisa berubah, lalu apa gunanya dua kata kunci mutableListOfatau ArrayList?
atau apakah ada perbedaan besar?
Jawaban:
Satu-satunya perbedaan antara keduanya adalah mengomunikasikan maksud Anda.
Saat Anda menulis val a = mutableListOf(), Anda mengatakan "Saya ingin daftar yang bisa berubah, dan saya tidak terlalu peduli dengan implementasinya". Saat Anda menulis, sebaliknya val a = ArrayList(), Anda mengatakan "Saya secara khusus menginginkan ArrayList".
Dalam praktiknya, dalam implementasi kompilasi Kotlin ke JVM saat ini, pemanggilan mutableListOfakan menghasilkan ArrayList, dan tidak ada perbedaan dalam perilaku: setelah daftar dibuat, semuanya akan berperilaku sama.
Sekarang, katakanlah versi Kotlin yang akan datang berubah mutableListOfuntuk mengembalikan jenis daftar yang berbeda.
Lebih mungkin daripada tidak, tim Kotlin hanya akan membuat perubahan itu jika mereka menganggap implementasi baru bekerja lebih baik untuk sebagian besar kasus penggunaan. mutableListOfkemudian akan meminta Anda menggunakan penerapan daftar baru tersebut secara transparan, dan Anda akan mendapatkan perilaku yang lebih baik secara gratis. Pergi dengan mutableListOfjika itu terdengar seperti kasus Anda.
Di sisi lain, mungkin Anda menghabiskan banyak waktu berpikir tentang masalah Anda, dan berpikir bahwa ArrayList benar-benar adalah cocok untuk masalah Anda, dan Anda tidak ingin risiko mendapatkan pindah ke sesuatu yang sub-optimal. Kemudian Anda mungkin ingin menggunakan ArrayListsecara langsung, atau menggunakan arrayListOffungsi pabrik ( ArrayListanalog -specific to mutableListOf).
mutableListOf<T>()adalah pemanggilan fungsi sebaris yang mengembalikan a
MutableList<T>. Pada hari ini, mutableListOftidak mengembalikan instance ArrayList.
ArrayList<String>() adalah pemanggilan konstruktor dan tidak bisa sebaris.
Dengan kata lain, diberikan:
val a = mutableListOf<String>()
val b = ArrayList<String>()
a adalah tipe MutableList<String>b adalah tipe ArrayList<String>Saat runtime, keduanya adan bakan menyimpan instance ArrayList.
Perhatikan bahwa penyebarisan sangat berguna jika dikombinasikan dengan reifikasi tipe , yang membenarkan keberadaan listOf, mutableListOfdan sejenisnya.
adan bmemiliki tipe yang dideklarasikan berbeda - jadi ada perbedaan pada waktu kompilasi.
val b = arrayListOf<String>()
Seperti yang Anda lihat di sumber :
public inline fun <T> mutableListOf(): MutableList<T> = ArrayList()
Jadi, tidak ada perbedaan, hanya metode kenyamanan.
mutableListOfjugaArrayListada kata kunci di Kotlin