นี่เป็นเวอร์ชันที่ง่ายของโค้ดที่เป็นปัญหาคลาสทั่วไปหนึ่งคลาสใช้คลาสอื่นที่มีพารามิเตอร์ชนิดทั่วไปและต้องการส่งหนึ่งประเภททั่วไปไปยังวิธีที่มีพารามิเตอร์ varargs:
class Assembler<X, Y> {
void assemble(X container, Y... args) { ... }
}
class Component<T> {
void useAssembler(T something) {
Assembler<String, T> assembler = new Assembler<String, T>();
//generates warning:
// Type safety : A generic array of T is
// created for a varargs parameter
assembler.assemble("hello", something);
}
}
มีวิธีที่ถูกต้องในการส่งต่อพารามิเตอร์ทั่วไปไปยังวิธีการ varargs โดยไม่ต้องพบคำเตือนนี้หรือไม่?
แน่นอนว่าสิ่งที่ชอบ
assembler.assemble("hello", new T[] { something });
ไม่ทำงานเนื่องจากคุณไม่สามารถสร้างอาร์เรย์ทั่วไป