Java 8 lambda 函数接口的不明确方法 - 目标类型
我有以下代码:
public class LambdaTest1 {
public static void method1(Predicate<Integer> predicate){
System.out.println("Inside Predicate");
}
public static void method1(Function<Integer,String> function){
System.out.println("Inside Function");
}
public static void main(String[] args) {
method1((i) -> "Test");
}
}
这给了我一条错误消息,因为
“方法方法 1(谓词)对于 LambdaTest1 类型是不明确的”。
我可以看到,对于 函数接口,输入参数是 。但对于 ,返回类型为 。Function
Consumer
Integer
Function
String
由于我的lambda调用的返回值为“Text” - 这应该调用我的函数接口而不是抛出此错误。Function
任何人都可以解释一下这种行为背后的原因吗?
还有另一个例子:
public class LambdaTest1 {
public static void method1(Consumer<Integer> consumer){
System.out.println("Inside Consumer");
}
public static void method1(Predicate<Integer> predicate){
System.out.println("Inside Predicate");
}
public static void main(String[] args) {
List<Integer> lst = new ArrayList<Integer>();
method1(i -> true);
method1(s -> lst.add(s)); //ambiguous error
}
}
同样在上面的代码中,该行给出了一个ambiguos错误,但上面的行工作正常。method1(s -> lst.add(s));
method1(i -> true)