Java 流泛型类型不匹配
在操作Java 8流时,我遇到了一个错误,编译器似乎“忘记”了我的通用参数的类型。
以下代码段创建类名流,并尝试将该流映射到 流 。Class<? extends CharSequence>
public static Stream<Class<? extends CharSequence>> getClasses() {
return Arrays.asList("java.lang.String", "java.lang.StringBuilder", "Kaboom!")
.stream()
.map(x -> {
try {
Class<?> result = Class.forName(x);
return result == null ? null : result.asSubclass(CharSequence.class);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
})
//.filter(x -> x != null)
;
}
当我取消注释过滤器以从流中删除空条目时,我收到编译错误
类型不匹配:无法从类<捕获 #15-of ?将 CharSequence> 扩展到 Class<Object>
有人可以向我解释为什么添加过滤器会导致此错误吗?
PS:这里的代码有点武断,很容易使错误消失:在应用过滤器之前将映射的流分配给临时变量。我感兴趣的是为什么上面的代码片段会生成编译时错误。
编辑:正如@Holger所指出的,这个问题并不是Java 8 Streams的完全重复:为什么Collecters.toMap对于带有通配符的泛型的行为不同?因为有问题的片段目前编译没有问题,而这里的片段没有。