co.pragmati.builder.Builder Maven / Gradle / Ivy
package co.pragmati.builder;
import java.util.ArrayList;
import java.util.List;
import java.util.function.BiConsumer;
import java.util.function.Consumer;
import java.util.function.Supplier;
/**
* Generic builder
* @param
*/
public class Builder {
private final Supplier instantiator;
private List> instanceModifiers = new ArrayList<>();
public Builder(Supplier instantiator) {
this.instantiator = instantiator;
}
public static Builder of(Supplier instantiator) {
return new Builder(instantiator);
}
public Builder with(BiConsumer consumer, U value) {
Consumer c = instance -> consumer.accept(instance, value);
instanceModifiers.add(c);
return this;
}
public T build() {
T value = instantiator.get();
instanceModifiers.forEach(modifier -> modifier.accept(value));
instanceModifiers.clear();
return value;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy