相关疑难解决方法(0)

名单<?扩展MyType>

我有关于泛型的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)

任何的想法?

java generics list bounded-wildcard

39
推荐指数
3
解决办法
5万
查看次数

带有通配符的列表会导致Generic voodoo错误

有谁知道为什么下面的代码不能编译?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)

java generics generic-list generic-collections

37
推荐指数
3
解决办法
2万
查看次数

<?extends> Java语法

这段代码:

List<? extends Reader> weirdList;
weirdList.add(new BufferedReader(null));
Run Code Online (Sandbox Code Playgroud)

有一个编译错误

在类型List中添加(捕获#1-of?extends Reader)的方法不适用于参数(BufferedReader)

为什么?BufferedReader扩展了读者,为什么不是"匹配"呢?

java generics

5
推荐指数
3
解决办法
236
查看次数