Về cơ bản, người ta nói rằng chỉ có một loại có thể cho T
và đó là chính mình là String
. Vì vậy, về cơ bản lớp chung của bạn Car
chỉ có tên chung. Bạn cũng có thể thay thế tất cả các phiên bản của T
trong lớp học với String
.
Có lẽ bạn có nghĩa là public class Car<T extends CharSequence>
...
Các cấu trúc được phép bởi vì lớp có ý nghĩa, và thậm chí có thể hữu ích. Các cảnh báo được đưa ra bởi vì (theo ý kiến của các nhà văn biên dịch), bạn có thể đã làm sai. Lý do là giống như đối với cảnh báo rằng một số trình biên dịch sẽ cung cấp cho bạn những điều sau đây:
String NULL = null;
System.err.println(NULL.toString());
Đây là ý nghĩa, nhưng nó là một sai lầm ... trừ khi bạn có ý định nó để ném một ngoại lệ.
tôi có thể nghĩ đến hai kịch bản mà public class Car<T extends SomeFinalClass>
không phải là một sai lầm:
- Các trường hợp
SomeFinalClass
ban đầu là không final
.
- Trường hợp mã cho
Car
được tạo tự động và sẽ rất khó khăn khi tạo mã trường hợp đặc biệt cho các lớp final
.
Nguồn
2012-09-18 10:28:30
Thông báo cảnh báo cho biết mọi thứ. Làm thế nào bạn có thể đưa ra một lớp mở rộng chuỗi 'final'? Vì vậy, 'T' sẽ dứt khoát là một chuỗi' – Raffaele
@ Thor84no xem câu hỏi đã chỉnh sửa và câu trả lời của [axtavt] (http://stackoverflow.com/a/12475147/315306) ' – Raffaele