在不引用lombok的的插件下,按需构建对象
import com.hytto.gfw.common.OptionResult;
import java.util.ArrayList;
import java.util.List;
import java.util.function.BiConsumer;
import java.util.function.Consumer;
import java.util.function.Supplier;
/**
* 通用Builder
*/
public class GenericBuilder<T> {
private final Supplier<T> instantiator;
private final List<Consumer<T>> instantiatorModifiers = new ArrayList<>();
private final List<Consumer<T>> keyValueModifiers = new ArrayList<>();
public GenericBuilder(Supplier<T> instantiator) {
this.instantiator = instantiator;
}
public static <T> GenericBuilder<T> of(Supplier<T> instantiator) {
return new GenericBuilder<>(instantiator);
}
public <U> GenericBuilder<T> with(BiConsumer<T, U> consumer, U value) {
Consumer<T> c = instance -> consumer.accept(instance, value);
instantiatorModifiers.add(c);
return this;
}
public T build() {
T value = instantiator.get();
instantiatorModifiers.forEach(modifier -> modifier.accept(value));
keyValueModifiers.forEach(keyValueModifier -> keyValueModifier.accept(value));
instantiatorModifiers.clear();
keyValueModifiers.clear();
return value;
}
public static void main(String[] args) {
OptionResult optionResult = GenericBuilder.of(OptionResult::new)
.with(OptionResult::setTip, "好的")
.with(OptionResult::setSuccess, true)
.build();
System.out.println(optionResult.toString());
}
}