首页 > 解决方案 > 带有函数参数的方法重载返回不明确的方法调用错误

问题描述

我有两个重载方法和一个测试方法

<T, R> R ifNotEmpty(T o, Function<T, R> function)
<T> void ifNotEmpty(T o, Consumer<T> consumer)
void test(String) {
//do nothing
}

当我打电话时

ifNotEmpty("aaa", x -> test(x));

我收到一个错误

Ambiguous method call. Both
ifNotEmpty(String,Function<String, R>) and
ifNotEmpty(String,Consumer<String>) match

为什么?

当我这样写时,它是正确的

ifNotEmpty("aaa", this::test);

像这样也正确

ifNotEmpty("aaa", (String x) -> test(x));

为什么?

我使用JDK-1.8和IDEA-2017.3.5-社区版

标签: java

解决方案


推荐阅读