gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:09:37 24 4
gpt4 key购买 nike

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

List<Number> numbers1 = objectList.stream()
.filter((Predicate) Number.class::isInstance)
.map(Number.class::cast)
.collect(Collectors.toList());

这会导致编译错误:

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 .

关于java - 原始类型谓词导致编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47611489/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com