如何解决Java编译错误:结合重载的方法引用?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (60)

下面是一个重载方法的类:

import java.util.ArrayList;
import java.util.concurrent.Callable;

public abstract class Test {

  public void test1 () {
    doStuff (ArrayList::new); // compilation error
  }

  public void test2 () {
    doStuff ( () -> new ArrayList<> ());
  }

  public abstract void doStuff (Runnable runable);

  public abstract void doStuff (Callable<ArrayList<String>> callable);
}

方法test1使用错误消息导致编译错误,The method doStuff(Runnable) is ambiguous for the type Test

我增加了第三种方法test3

public void test3 () {
    doStuff ( () -> {
      new ArrayList<> ();
    });
  }
提问于
用户回答回答于

但是编译器如何决定在test 2中执行这两种方法中的哪一种?

public void test2 () {
    doStuff ( () -> new ArrayList<> ());
}

隐式

public void test2 () {
    doStuff ( () -> { return new ArrayList<>(); } );
}

应该是这样:

public void test2 () {
    doStuff ( () -> { new ArrayList<>(); } );
}
用户回答回答于

可以简化一下:

// takes a Runnable
public static void doStuff(Runnable runable) {
    System.out.println("Runnable");
}

// takes a Callable
public static void doStuff(Callable<List<String>> callable) {
    System.out.println("Callable");
}
private static List<String> go() {
    return null;
}

private static List<String> go(int i) {
    return null;
}
doStuff(YourClass::go);

扫码关注云+社区

领取腾讯云代金券