javac 1.8.0_45和javac 1.8.0_92之间Java类型推断的差异是什么?

6

我有一段代码,它可以在 javac 1.8.0_92 编译:

public final class Either<L, R> {

    // ...

    private final L l;
    private final R r;

    // ...

    public <T> T join(final Function<L, T> f, final Function<R, T> g) {
        Preconditions.checkNotNull(f);
        Preconditions.checkNotNull(g);
        return which == LeftOrRight.LEFT ?
            f.apply(l) :
            g.apply(r);
    }

    public Optional<L> left() {
        return join(Optional::of, x -> Optional.empty());
    }

    // ...
}

然而,在 javac 1.8.0_45 版本中,需要一些额外的类型(L):

     public Optional<L> left() {
         return join(Optional::<L>of, x -> Optional.<L>empty());
     }

正如你所想象的那样,这会给用户从源代码构建软件包带来问题。

  • 为什么会这样?

  • 这是Java特定版本的bug吗?


非常相关(甚至是相似的代码示例):https://dev59.com/IZ_ha4cB1Zd3GeqP0Iit - Hulk
1个回答

5

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接