首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Java编译错误:方法引用与重载相结合

Java编译错误:方法引用与重载相结合
EN

Stack Overflow用户
提问于 2018-08-06 22:44:09
回答 1查看 569关注 0票数 11

我有以下类和一个重载的方法:

代码语言:javascript
复制
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,如下所示:

代码语言:javascript
复制
public void test3 () {
    doStuff ( () -> {
      new ArrayList<> ();
    });
  }

这里执行的是doStuff(Runnable)方法,这一点很明显。

但是编译器如何决定在test2中执行这两个方法中的哪一个呢

为什么我可以使用lambda表达式,但不能使用方法引用?

test2中的λ表达式使用返回可调用对象的方法,为什么方法引用要尝试使用另一个方法?

在我看来,这像是一个java bug。

编辑:它与ArrayList和/或它的泛型类型无关。具有Callable<String>或任何其他对象时,也会出现相同的错误。

提前感谢

迪米特里

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51710250

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档