我有一段代码,它可以在 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吗?