java - 如何解决 Java 方法引用歧义

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

}

最佳答案

没有“碰撞”:)

问题在于 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/

相关文章:

java - 是否可以在 Java 8 流 API 中定义可选流或类似异常的行为?

java - 如何使用 Streams 将一种类型的列表转换为另一种类型的列表?

在局部变量上调用的 Java 8 方法引用

java - Python 或 Java 中强大的 json 解析器

java 丢失来自 ManagedBeans 的值

java - 以与顶部栏后退按钮相同的方式处理 SettingsActivity onBackpressed()

Java 和 Autoit 无法发送 TAB、ENTER 等按键?

Java JDK - 为 macOS 下载时出现 404

Java 8::(双冒号)运算符的 Groovy 等效项

java-8 - 方法引用。不能对非静态方法进行静态引用