如何解决 Java 方法引用歧义

How to Resolve Java Method Reference Ambiguity

有没有办法让编译器选择静态方法引用?

此代码编译失败,因为有两个方法满足此方法引用。有没有办法提示或转换它以解析静态方法引用?

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);
  }

}

没有"collision":)

问题是 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);