2012-05-24 22 views
6

Bất cứ ai có thể giải thích cách cả hai cách này có thể biên dịch và cách thức hoạt động?Trong Generics Java, List <? super String> có nghĩa là gì?

List<? super String> list = new ArrayList<Object>(); 

Như tôi đã hiểu, việc thực hiện điều này cần phải là danh sách chuỗi hoặc danh sách đối tượng có chuỗi là siêu lớp? Tôi đã bỏ lỡ một cái gì đó?

+0

BTW - Lớp Chuỗi là cuối cùng và không có lớp nào mở rộng nó. – MByD

+0

Vâng tôi biết, chỉ có một trường hợp đã đưa ra thi java cert test =) – Marthin

Trả lời

20

Không (nghĩa là bạn đã bỏ lỡ điều gì đó :-). <? super String> là bất kỳ lớp nào là một lớp học siêu lớp của String (bao gồm cả String chính nó). (Trong trường hợp này, chỉ có lớp phù hợp khác là Object.)

gì bạn mô tả sẽ <? extends String> (mà trong trường hợp cụ thể này sẽ không thể rất hữu ích như Stringfinal, vì vậy nó có thể không có lớp con).

3

<? super String> chấp nhận String và bất kỳ số nào siêu lớp.

Không nên nhầm với:

<? extends String> chấp nhận String và bất kỳ lớp con (trong đó không có bất kỳ kể từ Stringfinal).

0

Stringfinal, nó không thể là lớp siêu của bất kỳ lớp nào khác. List<? super String> có nghĩa là bất kỳ loại siêu hạng nào là String. Trên thực tế, Object là một lớp siêu của String (của bất kỳ lớp nào thực sự).

Các vấn đề liên quan