java - 带有函数参数的方法重载返回不明确的方法调用错误
问题描述
我有两个重载方法和一个测试方法
<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-社区版
解决方案
推荐阅读
- asp.net - ASP.NET MVC 自定义错误页面卡在重定向循环中
- javascript - 为什么“0”通常被认为是假的,而不是三元运算符?
- amazon-web-services - aws-ecs,如何向现有容器添加文件节拍?
- reactjs - 如何将 withRouter() 与通用组件一起使用
- c# - ListView图像有时在winform c#中放错位置并消失
- numbers - Nasm 中的打印数字批评
- redirect - 尝试使用查询字符串将子域重定向到域时,IIS URL 重写不起作用
- javascript - Rock, Paper, Scissors 游戏:输入正确的值返回错误的 console.log 消息
- mysql - 求和子查询 MySql
- multithreading - 分析多线程中的上下文切换