Ambigous method call с Lambda
От: vsb Казахстан  
Дата: 11.07.21 14:15
Оценка:
Не очень понимаю, почему так происходит.

    <R> R f0(Function<Integer, R> function) {
        return function.apply(0);
    }

    void f0(Consumer<Integer> consumer) {
        consumer.accept(0);
    }

    String x(String s, Integer i) {
        return s + i;
    }

    void test() {
        f0(i -> {});
        f0(i -> { return x("", i); });
        f0(i -> "" + i);
        f0(i -> x("", i)); // java: reference to f0 is ambiguous
    }


Полный текст ошибки компиляции:

java: reference to f0 is ambiguous
  both method <R>f0(java.util.function.Function<java.lang.Integer,R>) in Test and method f0(java.util.function.Consumer<java.lang.Integer>) in Test match


Не очень понятно, почему так происходит. Первые три варианта компилируются. Чем второй или третий вариант отличается от четвёртого? С чего это вдруг вызов функции, которая возвращает значение, может подходить под перегрузку с Consumer.
Отредактировано 11.07.2021 14:17 vsb . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.