tôi đang gặp khó khăn tìm hiểu bài viết sau: http://www.ibm.com/developerworks/java/library/j-jtp01255.htmlgenerics java hiệp phương sai
Dưới,
Generics không hiệp biến
các bang tác giả,
Vì ln là Danh sách, thêm Float cho nó có vẻ hoàn toàn hợp pháp. Nhưng nếu ln được gán bí danh với li, thì sẽ phá vỡ lời hứa an toàn loại ẩn trong định nghĩa li - rằng đó là danh sách các số nguyên, trong đó là lý do loại chung không thể là .
Tôi không thể hiểu được phần mà nó nói "nếu ln được đặt bí danh với li". Tác giả có nghĩa là gì bằng bí danh? (Tham chiếu?). Đoạn mã trên dòng được trích dẫn dường như minh họa WHAT là bất hợp pháp trong java và không phải TẠI SAO. Nó sẽ rất hữu ích cho tôi nếu ai đó có thể giải thích bằng một ví dụ. Cảm ơn trước.
IIRC, kiểu generic là không hiệp biến bởi vì họ không thể thay đổi cách mảng được thực hiện/sử dụng trong các phiên bản trước của Java (tương thích ngược), nó rung chuông với ai đó? – Rhangaun
@Skeptic, Mảng là một ví dụ về việc thực hiện genervariant generics có thể trông như thế nào - nó sẽ ném các ngoại lệ thời gian chạy. Java không thể làm điều đó vì các generics bị xóa trong thời gian chạy, vì vậy nó chỉ có thể kiểm soát nó thông qua giới hạn hiệp phương sai. – Yishai
@Yishai, vấn đề với mảng được thảo luận bởi Steele trong một bài thuyết trình có tên là "Phát triển một ngôn ngữ" mà tôi dường như không thể tìm thấy ngay bây giờ. – Rhangaun