Java.lang.Long не является функциональным интерфейсом

Я создал этот класс GenericBuilder (почти не вдохновленный Как реализовать шаблон построителя в Java 8?)

public class GenericBuilder<T> {

    private final T instance;

    private GenericBuilder(T instance) {
        this.instance = instance;
    }

    public static <T> GenericBuilder<T> of(Supplier<T> instantiator) {
        return new GenericBuilder<T>(instantiator.get());
    }

    public <U> GenericBuilder<T> with(BiConsumer<T, U> consumer,
                                      U value) {
        ((Consumer<T>) t -> consumer.accept(t, value)).accept(instance);
        return this;
    }

    public <U> GenericBuilder<T> with(BiConsumer<T, U> consumer,
                                      Supplier<U> supplier) {
        return with(consumer, supplier.get());
    }

    public T build() {
        return instance;
    }
}

Но второй метод with () бросает

incompatible types: cannot infer type-variable(s) U (argument mismatch; java.lang.Long is not a functional interface)

когда я выполняю следующее:

GenericBuilder.of(Dto::new)
        .with(Dto::setId, entity::getId)
        .build();

Обратите внимание, что организация является экземпляром класса Организация.

не могли бы вы предоставить образцы данных для воспроизведения указанной ошибки?

Ousmane D. 28.12.2018 23:31

Я могу просто чего-то упустить, но почему with не может быть реализован как просто consumer.accept(instance, value)? Зачем объявлять отдельную лямбду, если вы просто собираетесь ее сразу вызвать?

Daniel Pryden 28.12.2018 23:32

С какой версией Java вы компилируете?

Jacob G. 28.12.2018 23:39

Даниэль, ты прав, спасибо за совет, но ошибка осталась. Джейкоб, версия java "1.8.0_152".

user1919662 28.12.2018 23:41

Можете ли вы попробовать обновиться до более поздней версии Java (желательно 11) и сообщить нам, сохраняется ли ошибка? В более поздних версиях было много улучшений логических выводов.

Jacob G. 28.12.2018 23:44

Я полагаю, что с стиранием шрифта перегрузка with() проблематична. Вы пробовали использовать только вариант with(BiConsumer, Supplier)?

d.j.brown 28.12.2018 23:47
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
6
448
0

Другие вопросы по теме