ฉันมีปัญหาในการนำทางกฎของ Java สำหรับอนุมานพารามิเตอร์ประเภททั่วไป พิจารณาคลาสต่อไปนี้ซึ่งมีพารามิเตอร์รายการทางเลือก:
import java.util.Collections;
import java.util.List;
public class Person {
private String name;
private List<String> nicknames;
public Person(String name) {
this(name,Collections.emptyList());
}
public Person(String name,List<String> nicknames) {
this.name = name;
this.nicknames = nicknames;
}
}
คอมไพเลอร์ Java ของฉันมีข้อผิดพลาดดังต่อไปนี้:
Person.java:9: The constructor Person(String, List<Object>) is undefined
แต่Collections.emptyList()
ผลตอบแทนที่พิมพ์ไม่ได้<T> List<T>
List<Object>
การเพิ่มนักแสดงไม่ได้ช่วยอะไร
public Person(String name) {
this(name,(List<String>)Collections.emptyList());
}
อัตราผลตอบแทน
Person.java:9: inconvertible types
ใช้EMPTY_LIST
แทนemptyList()
public Person(String name) {
this(name,Collections.EMPTY_LIST);
}
อัตราผลตอบแทน
Person.java:9: warning: [unchecked] unchecked conversion
ในขณะที่การเปลี่ยนแปลงต่อไปนี้ทำให้ข้อผิดพลาดหายไป:
public Person(String name) {
this.name = name;
this.nicknames = Collections.emptyList();
}
ใครช่วยอธิบายกฎการตรวจสอบประเภทที่ฉันใช้กับที่นี่และวิธีที่ดีที่สุดในการแก้ไข ในตัวอย่างนี้ตัวอย่างรหัสสุดท้ายเป็นที่น่าพอใจ แต่ด้วยคลาสที่มีขนาดใหญ่ขึ้นฉันต้องการให้สามารถเขียนเมธอดตามรูปแบบ "พารามิเตอร์ทางเลือก" นี้โดยไม่ต้องทำซ้ำรหัส
สำหรับสินเชื่อพิเศษ: เมื่อมันเหมาะสมที่จะใช้EMPTY_LIST
เมื่อเทียบกับemptyList()
?