bpg*_*rgo 27 java generics wildcard
编译(1.6)
List<? extends Object> l = new ArrayList<Date>();
Run Code Online (Sandbox Code Playgroud)
但事实并非如此
List<List<? extends Object>> ll = new ArrayList<List<Date>>();
Run Code Online (Sandbox Code Playgroud)
有错误的
Type mismatch: cannot convert from ArrayList<List<Date>> to List<List<? extends Object>>
Run Code Online (Sandbox Code Playgroud)
有人能解释为什么吗?谢谢
编辑:编辑为后续
Voo*_*Voo 17
那么解释是正确的,但我认为添加实际的工作解决方案也是一件好事;)
List<? extends List<? extends Object>>
Run Code Online (Sandbox Code Playgroud)
工作得很好,但显然这种集合的使用受到通用集合的通常限制的限制(但是对于更简单的List <?extends Date>也是如此)
Mic*_*rdt 12
因为它会打破类型安全:
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
Run Code Online (Sandbox Code Playgroud)