【发布时间】:2017-08-24 19:16:51
【问题描述】:
我在 java 8 中遇到了一个问题,它不允许我在使用强制转换时收集对象。
definitions.stream()
.map(Definition.class::cast)
.map((Definition definition) -> {
WonderfulDefinition wd = new WonderfulDefinition();
wd.name(definition.getName());
//etc
return wd;
}).collect(Collectors.toList())
我收到编译器错误:
Error:(71, 23) java: incompatible types: inference variable T has in compatible bounds 等式约束:java.util.List 下界:java.lang.Object
任何帮助将不胜感激。
更新:
import java.util.*;
import java.util.stream.*;
class Driver {
public static void main(String[] args) {
List definitions = new ArrayList<>();
definitions.add(new Definition());
definitions.add(new Definition());
List<WonderfulDefinition> list =
definitions.stream()
.map(Definition.class::cast)
.map((Definition definition) -> {
WonderfulDefinition wd = new WonderfulDefinition();
wd.name(definition.getName());
//etc
return wd;
}).collect(Collectors.toList());
System.out.println(list);
}
}
class Definition {
private String name;
public String getName() {
return name;
}
public void name(String name) {
this.name = name;
}
}
class WonderfulDefinition extends Definition {
}
【问题讨论】:
-
什么类型包含您的初始
definitions列表? -
不幸的是。它来自第 3 方库,该库将定义返回为没有类型的 List。即 dictionary.getDefinitions() 只返回 List
-
List 变量有什么类型?它可能标志着那部分,因为没有其他提及列表。
-
请用MCVE 更新您的问题,它会重现您遇到的问题。这是您的代码按原样工作的示例:ideone.com/IPoexa
-
嗨 Radiodef,我更新了它。由于列表只是“列表”(lib 代码无法更改它)而没有类型说明符(对象或其他)它失败了。
标签: java lambda casting collectors