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