private val repositories = mutableListOf<String>()
private val repositories = ArrayList<String>()
ทั้งสองรายการไม่แน่นอนแล้วสิ่งที่เป็นจุดของทั้งสองคำหลักmutableListOfหรือArrayList?
หรือมีความแตกต่างที่สำคัญ?
private val repositories = mutableListOf<String>()
private val repositories = ArrayList<String>()
ทั้งสองรายการไม่แน่นอนแล้วสิ่งที่เป็นจุดของทั้งสองคำหลักmutableListOfหรือArrayList?
หรือมีความแตกต่างที่สำคัญ?
คำตอบ:
ความแตกต่างเพียงอย่างเดียวระหว่างทั้งสองคือการสื่อสารเจตนาของคุณ
เมื่อคุณเขียนval a = mutableListOf()คุณกำลังพูดว่า "ฉันต้องการรายการที่ไม่แน่นอนและฉันไม่สนใจเป็นพิเศษเกี่ยวกับการนำไปใช้งาน" เมื่อคุณเขียนแทนคุณval a = ArrayList()จะพูดว่า "ฉันต้องการโดยเฉพาะArrayList"
ในทางปฏิบัติในการใช้งาน Kotlin ที่รวบรวมกับ JVM ในปัจจุบันการโทรmutableListOfจะสร้างArrayListและไม่มีความแตกต่างในพฤติกรรม: เมื่อสร้างรายการแล้วทุกอย่างจะทำงานเหมือนเดิม
ตอนนี้สมมติว่า Kotlin เวอร์ชันในอนาคตmutableListOfจะเปลี่ยนเพื่อส่งคืนรายการประเภทอื่น
Likelier ไม่ใช่ทีม 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.
โปรดทราบว่าอินไลน์เป็นประโยชน์อย่างยิ่งเมื่อรวมกับประเภททำให้เป็นจริงซึ่ง justifies การดำรงอยู่ของlistOf, mutableListOfและชอบ
aและbมีประเภทการประกาศที่แตกต่างกันดังนั้นเวลาคอมไพล์จึงมีความแตกต่างกัน
val b = arrayListOf<String>()
ดังที่คุณเห็นในแหล่งที่มา :
public inline fun <T> mutableListOf(): MutableList<T> = ArrayList()
ดังนั้นไม่มีความแตกต่างเพียงแค่วิธีการอำนวยความสะดวก
mutableListOfมิได้ArrayListมีคำหลักใน Kotlin