我注意到在标准 Java 流下面的情况下,比 StreamEx 更好地“计算”变量类型。这很奇怪,因为人们喜欢 StreamEx 并在任何地方使用它,但是代码却被“?”污染了。我想使用List<Class<?>
,但 StreamEx 强迫我使用List<? extends Class<?>>
. 有人可以解释为什么 StreamEx 会这样工作吗?我可以以某种方式将所需的变量类型与 StreamEx 一起使用吗?
private static List<? extends Class<?>>
fooList_StreamEx_Compiles(List<Integer> input) {
return StreamEx.of(input)
.map(x -> foo())
.toList();
}
private static List<Class<?>>
fooList_StreamEx_Error(List<Integer> input) {
return StreamEx.of(input)
.map(x -> foo())
// Error: incompatible types: java.util.List<java.lang.Class<capture#1 of ?>>
// cannot be converted to java.util.List<java.lang.Class<?>>
.toList();
}
private static List<Class<?>> fooList(List<Integer> input) {
return input
.stream()
.map(x -> foo())
.collect(Collectors.toList());
}
private static Class<?> foo() {
return String.class;
}
我正在使用 StreamEx 0.7.0 和 Java 11