方法引用导致原始类型编译器警告,但lambda不会

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了方法引用导致原始类型编译器警告,但lambda不会相关的知识,希望对你有一定的参考价值。

鉴于:

public static <T> CompletableFuture<? extends List<? extends T>> supplyAllOf(
    List<? extends CompletableFuture<? extends T>> input)
{
    return CompletableFuture.allOf(input.toArray(new CompletableFuture<?>[input.size()])).
        thenApply(ignored -> input.stream().map(CompletableFuture::join).collect(Collectors.toList()));
}

我收到此编译器警告(使用-Xlint):

found raw type: java.util.concurrent.CompletableFuture
  missing type arguments for generic class java.util.concurrent.CompletableFuture<T>

但如果我用CompletableFuture::join取代e -> e.join()警告就会消失。

这是编译器错误吗?如果没有,为什么我会看到这种行为?

答案

不完全确定,但看起来像this issue(或至少它的用例)。

无论哪种方式,这都是在10(刚刚测试过)中修复的,并且它不会产生任何警告。

以上是关于方法引用导致原始类型编译器警告,但lambda不会的主要内容,如果未能解决你的问题,请参考以下文章

为啥 c++ 编译器不会警告返回对局部变量的引用?

为啥将 lambda 传递给受约束的类型模板参数会导致“不完整类型”编译器错误?

选择性地抑制未使用 lambda 的“未使用变量”警告

如何抑制可能的空引用警告

为啥在 ARC 中发送消息会导致保留周期警告,但属性集不会?

C ++ 17 lambda捕获具有宽松的类型要求