キャストを使用するときにオブジェクトを収集することができない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 incompatible bounds equality constraints: java.util.List lower bounds: 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''リストが含まれていますどのようなタイプ:?
はこのような何かが完全に有効であることに留意してください –
残念ながらオブジェクト。これは、型なしのListとして定義を返すサードパーティのlibから来ています。 dictionary.getDefinitions()はリストを返します – CoffeeIsProgramming
List変数にはどのような型がありますか?それはリストの他の言及がないので、おそらくその部分をマークします。 –