Nếu tôi có một lớp:Tại sao một lớp nguyên gốc Java xóa tất cả các generics thành đối tượng khi các tham số kiểu không xác định?
public class GenericClass<TBlah extends Number> {
public List<String> getList() {
return null;
}
}
Khi tôi cố gắng sử dụng phương pháp từ một lớp khác:
public class OtherClass {
public void test() {
GenericClass a = null;
for (String s : a.getList()) {
}
}
}
Tại sao a.getList()
trả về một List<Object>
cho đến khi tôi có sự thay đổi so với vòng lặp for để:
GenericClass<Number> a = null;
Tại thời điểm này a.getList() trả về số List<String>
như cần làm?
Chỉnh sửa: Tôi không hiểu tại sao hợp đồng được chỉ định bởi getList()
phải bị ảnh hưởng bởi bất kỳ cách nào tôi khai báo biến 'a'. getList()
luôn trả về một List<String>
, không quan trọng những gì TBlah là.
Uhm, tại sao khởi tạo nó thành 'null'? – fge
@fge Đơn giản. Nó không liên quan đến vấn đề tôi nghĩ. – Xenoprimate
Bởi vì đó là sự lựa chọn được thực hiện bởi các nhà văn của JLS. AFAIK, lý do là nếu bạn sử dụng các loại thô, bạn không quan tâm đến các loại generic. Giải pháp là tránh sử dụng các loại thô. –