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;
    }
}

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

несовместимые типы: невозможно определить переменную типа (типов) U (несоответствие аргумента; java.lang.Long не является функциональным интерфейсом)

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

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

Обратите внимание, что сущность является экземпляром класса Entity.

0 ответов

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