- это правильный способ создания шаблона компоновщика в Java, если нет возможных изменений.
пробовал со статическим классом
public class Multiverse {
private UUID universeId;
private String universeName;
private String universeType;
private Boolean humanExistence;
public Boolean getHumanExistence() {
return humanExistence;
}
private Multiverse() {
throw new IllegalStateException("Can`t create object from constructor: try using builder");
}
private Multiverse(UUID universeId, String universeName, String universeType, Boolean humanExistence) {
super();
this.universeId = universeId;
this.universeName = universeName;
this.universeType = universeType;
this.humanExistence = humanExistence;
}
public static class MultiverseBuilder{
private UUID universeId;
private String universeName;
private String universeType;
private Boolean humanExistence;
public MultiverseBuilder makeUUId(UUID uuid) {
this.universeId=uuid;
return this;
}
public MultiverseBuilder createUniverse(String univ) {
this.universeName=univ;
return this;
}
public MultiverseBuilder setUniverseType(String universeType ) {
this.universeType=universeType;
return this;
}
public MultiverseBuilder isHumanExists(Boolean humanExistence) {
this.humanExistence=humanExistence;
return this;
}
public Multiverse build() {
return new Multiverse(universeId,universeName,universeType,humanExistence);
}
}
public UUID getUniverseId() {
return universeId;
}
public String getUniverseName() {
return universeName;
}
public String getUniverseType() {
return universeType;
}
}
Junit5 test
public class AssertionsTest6 {
private static Logger logger=Logger.getLogger(AssertionsTest6.class.getName());
Multiverse multiverse;
@BeforeEach
void init(){
multiverse=new Multiverse.MultiverseBuilder()
.makeUUId(UUID.randomUUID())
.createUniverse("Earth")
.setUniverseType("Big Bang")
.isHumanExists(true)
.build();
}
@Test
@DisplayName("Builder Testing")
void TestBuilder() {
assertEquals("Big Bang", multiverse.getUniverseType(), "test failed");
logger.info("Builder testing");
}
}
заблокировал отражение, чтобы сделать объект непосредственно из класса Multiverse, сделав это
private Multiverse() {
throw new IllegalStateException("Can`t create object from constructor: try using builder");
}
ожидаемым и фактическим, то же самое.но не уверен, что это лучший способ достичь цели.пожалуйста, исправьте или предложите мне это, [требуется консультация специалиста]