有没有办法让编译器选择静态方法引用?
此代码无法编译,因为有两种方法可以满足此方法引用。有没有办法提示或转换它以解决静态方法引用?
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);
}
}
答案 0 :(得分:3)
没有“碰撞”:)
问题是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);