【发布时间】:2017-06-11 08:24:10
【问题描述】:
我有一些使用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 版本的错误吗?
【问题讨论】:
-
非常密切相关(甚至相似的代码示例):stackoverflow.com/q/42485052/2513200
标签: java type-inference