У меня есть код ниже:
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) работает нормально.