Như tôi biết, một trong những mục đích chính của Generics trong Java là cung cấp tính an toàn kiểu thời gian biên dịch. Nếu nó được biên dịch, mã sẽ chạy mà không có sự cố.Chuỗi được gán cho một Danh sách không có lỗi biên dịch
Sau đó, tại sao mã sau được biên dịch?
public static void main(String[] args) {
String s = getList();
}
private static <T extends List> T getList() {
return (T)new ArrayList();
}
Nó biên dịch tốt. Trình biên dịch an toàn loại của tôi ở đâu? Phương thức getList()
không có điểm chung với lớp String
.
Không, điều này biên dịch ngay cả khi sử dụng các loại không phải thô. –
@MarkusFischer, Tôi cũng nghĩ về điều đó, nhưng trình biên dịch nhận ra rằng String là một lớp cuối cùng và không thể có bất kỳ lớp con nào – Andrew
@MarkusFischer, bạn nên chuyển nhận xét này thành câu trả lời. Tôi nghĩ đó chính xác là vấn đề op được quan sát ở đây. 'MyClass mở rộng chuỗi thực hiện List' có thể có thể tại thời gian biên dịch như trình biên dịch không xem xét String là' cuối cùng', như bạn đã nói, cho những loại kiểm tra chung chung. – Zabuza