我有关于泛型的Java问题.我宣布了一个通用名单:
List<? extends MyType> listOfMyType;
Run Code Online (Sandbox Code Playgroud)
然后在某些方法中我尝试实例化并将项添加到该列表:
listOfMyType = new ArrayList<MyType>();
listOfMyType.add(myTypeInstance);
Run Code Online (Sandbox Code Playgroud)
哪里myTypeInstance只是一个类型的对象MyType; 它不会编译.它说:
该方法在类型List <capture#3-of中添加(捕获#3-of?extends MyType)?extends MyType>不适用于参数(MyType)
任何的想法?
有谁知道为什么下面的代码不能编译?add()和addAll()都不能按预期工作.删除"?extends"部分会使一切正常,但之后我将无法添加Foo的子类.
List<? extends Foo> list1 = new ArrayList<Foo>();
List<? extends Foo> list2 = new ArrayList<Foo>();
/* Won't compile */
list2.add( new Foo() ); //error 1
list1.addAll(list2); //error 2
Run Code Online (Sandbox Code Playgroud)
错误1:
IntelliJ说:
add(capture<? extends Foo>) in List cannot be applied to add(Foo)
Run Code Online (Sandbox Code Playgroud)
编译器说:
cannot find symbol
symbol : method addAll(java.util.List<capture#692 of ? extends Foo>)
location: interface java.util.List<capture#128 of ? extends Foo>
Run Code Online (Sandbox Code Playgroud)
错误2:
IntelliJ给了我
addAll(java.util.Collection<? extends capture<? extends Foo>>) in List cannot be applied to addAll(java.util.List<capture<? extends Foo>>)
Run Code Online (Sandbox Code Playgroud)
而编译器只是说
cannot find symbol
symbol …Run Code Online (Sandbox Code Playgroud) 这段代码:
List<? extends Reader> weirdList;
weirdList.add(new BufferedReader(null));
Run Code Online (Sandbox Code Playgroud)
有一个编译错误
在类型List中添加(捕获#1-of?extends Reader)的方法不适用于参数(BufferedReader)
为什么?BufferedReader扩展了读者,为什么不是"匹配"呢?