1

我创建了这个 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() 方法抛出

不兼容的类型:无法推断类型变量 U(参数不匹配;java.lang.Long 不是函数式接口)

当我执行以下操作时:

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

请注意,实体是实体类的一个实例。

4

0 回答 0