เหตุใดตัวสร้าง List () จึงไม่สามารถเข้าถึงได้ในความปลอดภัยว่างของ Dart
ด้วย NNBD คุณไม่ได้รับอนุญาตให้เริ่มต้นรายการโดยใช้ตัวสร้างเริ่มต้น:
List<int> foo = List(); // Compile time error
อย่างไรก็ตามคุณยังสามารถทำสิ่งต่อไปนี้ได้
List<int> foo = []; // No error
แล้วทั้งสองต่างกันอย่างไร? ทั้งคู่ควรแสดงข้อผิดพลาดหรือไม่มีเลย
คำตอบ
ตัวList
สร้างมีสองประโยชน์:
new List()
การสร้างรายการ growable[]
ว่างเทียบเท่าnew List(n)
เพื่อสร้างรายการความยาวคงที่ที่n
เต็มไปด้วยnull
ค่า
ด้วยความปลอดภัยที่เป็นโมฆะการใช้งานครั้งที่สองไม่เป็นผลโดยส่วนใหญ่และไม่มีวิธีที่ดีในการแก้ไข เป็นไปได้ที่จะบังคับให้อาร์กิวเมนต์ประเภทไม่เป็นโมฆะ แต่List<T>(4)
จะใช้ได้เฉพาะเมื่อT
เป็นโมฆะเท่านั้น ไม่มีทางบังคับได้อย่างนั้น
ดังนั้นList(n)
โหมดที่จำเป็นในการดำเนินการ (แทนที่ด้วยการList.filled(n, value)
บังคับให้คุณระบุค่าการเติม) ด้านซ้ายList()
ซึ่งไม่ได้รับน้ำหนักของตัวเองจริงๆ คุณสามารถใช้[]
แทนได้ (และคุณควร !) ดังนั้นจึงมีการตัดสินใจที่จะลบตัวสร้างทั้งหมด - การใช้งานทั้งหมดไม่ปลอดภัยหรือไร้ประโยชน์ (นอกจากนี้มันเป็นตัวสร้างที่แปลกอยู่แล้วเพราะถ้าเราต้องการทำให้มันเป็นโมฆะอย่างถูกต้องมันจะมีพารามิเตอร์ที่เป็นทางเลือกที่มีประเภทที่ไม่เป็นโมฆะและไม่มีค่าเริ่มต้น)
โดยการเอามันสมบูรณ์ก็จะทำให้มันเป็นไปได้ที่อาจแนะนำใหม่คอนสตรัคในอนาคตอาจจะเป็นนามแฝงที่สั้นลงList
List.filled
หนึ่งสามารถหวัง