如何解决Java方法参考歧义

时间:2018-02-01 15:34:55

标签: java java-8 method-reference

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

此代码无法编译,因为有两种方法可以满足此方法引用。有没有办法提示或转换它以解决静态方法引用?

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

}

1 个答案:

答案 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);