Java 泛型,通配符的嵌套集合

2022-09-01 07:43:22

这将编译 (1.6)

List<? extends Object> l = new ArrayList<Date>();

但事实并非如此

List<List<? extends Object>> ll = new ArrayList<List<Date>>();

与错误

Type mismatch: cannot convert from ArrayList<List<Date>> to List<List<? extends Object>>

有人能解释一下为什么吗?谢谢

编辑:编辑为后果


答案 1

好吧,解释是正确的,但我认为添加实际的工作解决方案也是一件好事,;)

List<? extends List<? extends Object>>

可以正常工作,但显然,使用这样的集合受到通用集合的通常限制(但对于更简单的列表也是如此< ? 扩展了日期>)


答案 2

因为它会破坏类型安全:

List<List<Object>> lo = new ArrayList<List<Object>>();
List<List<? extends Object>> ll = lo;
List<String> ls = new ArrayList<String>();
ll.add(ls);
lo.get(0).add(new Object());
String s = ls.get(0); // assigns a plain Object instance to a String reference

推荐