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.