У меня есть код ниже:
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");
}
}
Это дает мне сообщение об ошибке как
"Метод method1 (Predicate) неоднозначен для типа LambdaTest1".
Я вижу, что для функционального интерфейса Function и Consumer входной аргумент Integer. Но для Function возвращаемый тип String. Поскольку мой вызов имеет тип возврата как "Текст". Это должно было называться моим функциональным интерфейсом 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
}
}
Также в приведенном выше коде используется метод линии1 (s → lst.add(s)); дает ошибку ambiguos, но где, как приведенный выше метод линии1 (i → true) работает нормально.