有没有办法让编译器选择静态方法引用?
此代码无法编译,因为有两个方法满足此方法引用。有没有办法提示或强制转换它,以便它解析静态方法引用?
public class Number {
private final int value;
public Number(int value) {
this.value = value;
}
public Number add(int x) {
return operate(Number::add, x); // <---- compile fail here at Number::add
}
private Number operate(BiFunction<Number, Integer, Number> function, int x) {
return function.apply(this, x);
}
public static Number add(Number x, int y) {
return new Number(x.value + y);
}
}
最佳答案
没有“碰撞”:)
问题在于 Number::add
不明确(编译器 - 至少 Eclipse 中的编译器 - 正确报告这一点)。
不明确的代码:
BiFunction<Number, Integer, Number> m = Number::add;
可能意味着:
BiFunction<Number, Integer, Number> m = (x,y) -> Number.add(x,y);
或者:
BiFunction<Number, Integer, Number> m = (x,y) -> x.add(y);
关于java - 如何解决 Java 方法引用歧义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48566450/