Конечно, вы можете сделать это без switch
заявления.
Если у вас есть только несколько случаев, вы можете использовать троичный оператор.
public static X createObject(int type) {
return type == 1 ?
new A() :
type == 2 ?
new B() :
null;
}
Вы также можете использовать более общий подход:
private static final Map<Integer, Supplier<X>> FACTORIES;
static {
FACTORIES = new HashMap<>();
FACTORIES.put(1, A::new);
FACTORIES.put(2, B::new);
}
public static X createObject(int type) {
return Optional.ofNullable(FACTORIES.get(type))
.map(Supplier::get)
.orElse(null);
}
Поскольку вы используетецелые числа для идентификации типа, вы можете очень легко использовать массив:
private static final Supplier<X>[] FACTORIES = new Supplier[] { A::new, B::new };
public static X createObject(int type) {
return type > 0 && type <= FACTORIES.length ?
FACTORIES[type - 1].get() :
null;
}