原始类型谓词导致编译错误

我不明白为什么原始类型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::isInstancePredicate

这就导致了一个编译错误:

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>

回答:

  1. 正如您提供的原始类型为filter,它将返回原始的Stream
  2. 通常,map将是<R> Stream<R> Stream<T>::map(Function<? super T, ? super R> function)。但是现在没有T,所以参数被强制为Function类型,所以map也最终返回原始的Stream
  3. 类似的逻辑意味着collect返回Object

以上是 原始类型谓词导致编译错误 的全部内容, 来源链接: utcz.com/qa/257827.html

回到顶部