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

时间:2018-03-06 05:58:31

标签: java generics lambda method-reference

假设:

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(),警告就会消失。

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

1 个答案:

答案 0 :(得分:0)

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

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