Я хотел бы создать цепочку построителей, где я могу предоставить различные наборы методов, основанные на значении i
.Если я могу использовать эти промежуточные классы компоновщика, я могу ограничить доступные методы во время компиляции, а не полагаться на проверки во время выполнения.(Промежуточные классы компоновщика не предназначены для предоставления конечному пользователю, они просто предназначены для предоставления различных наборов методов после вызова set()
.)
public class SomeClass {
public static class SomeClassBuilder {
public <What should I return ?> set(int i) {
switch (i) {
case 1:
return new Case1Builder();
break;
case 2:
case 3:
return new Case2And3Builder();
break;
case 4:
return new Case4Builder();
break;
default:
return this;
}
}
public SomeClass.SomeClassBuilder build() {
}
}
public static final class Case1Builder() {
public SomeClass.Case1Builder set1() {
}
}
public static final class Case2And3Builder() {
public SomeClass.Case1Builder set2And3() {
}
}
public static final class Case4Builder() {
public SomeClass.Case1Builder set4() {
}
}
}
А затем из моего класса драйверов, Я мог бы сделать ниже:
final SomeClass someClass = new SomeClass.SomeClassBuilder(1).set1().build();
final SomeClass someClass = new SomeClass.SomeClassBuilder(2).set2And3().build();
Возможно ли это?Может быть, с использованием дженериков?