【问题标题】:Method reference results in raw-type compiler warning, but lambda does not方法引用导致原始类型编译器警告,但 lambda 不会
【发布时间】:2018-03-06 05:58:30
【问题描述】:

给定:

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 -&gt; e.join(),警告就会消失。

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

【问题讨论】:

  • @PrzemysławMoskal 感谢您的提醒。对我来说,这听起来像是一个编译器错误。此外,我无法弄清楚如何为我的案例应用 Holger 的解决方法。如果没有找到答案,我会让这个问题酝酿几天并提交错误报告。

标签: java generics lambda method-reference


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-15
    • 2019-06-17
    • 1970-01-01
    • 2019-03-11
    • 2018-05-16
    • 2013-09-20
    相关资源
    最近更新 更多