原始类型谓词导致编译错误
我不明白为什么原始类型Predicate会导致编译错误,即使我有一个类型转换。我们来看下面的例子:原始类型谓词导致编译错误
从包含不同对象的列表中获取延伸Number的列表,并将其转换为Number并收集到List。
List<Object> objectList = Arrays.asList(1, 3.4, 2, new Object(), ""); List<Number> numbers = objectList
.stream()
.filter(Number.class::isInstance)
.map(Number.class::cast)
.collect(Collectors.toList());
让我们做同样的事情,但是这一次,让我们投Number.class::isInstance到Predicate:
这就导致了一个编译错误:
Error:(28, 25) java: incompatible types: java.lang.Object cannot be converted to java.util.List
有一个filter后获得的铸造操作.map(Number.class::cast)和.collect(Collectors.toList());但最终的类型是java.lang.Object。为什么你认为结果类型是java.lang.Object而不是List<Number>?
回答:
- 正如您提供的原始类型为
filter,它将返回原始的Stream。 - 通常,
map将是<R> Stream<R> Stream<T>::map(Function<? super T, ? super R> function)。但是现在没有T,所以参数被强制为Function类型,所以map也最终返回原始的Stream。 - 类似的逻辑意味着
collect返回Object。
以上是 原始类型谓词导致编译错误 的全部内容, 来源链接: utcz.com/qa/257827.html

