Мой класс, как это:Java способ создания объекта на основе перечислимого типа
class X {}
class Y extends X {};
class Z extends X {};
У меня есть перечисление для каждого подкласса (ид + класс):
enum Type {
Y_TYPE(1, Y.class), Z_TYPE(2, Z.class);
int id;
Class c;
public Type(int id, Class c) { this.id = id; this.c = c; }
public static X createInstance() throws Exception {
return c.newInstance();
}
}
Тогда я использовал их следующим образом:
X parseFromID(int id) {
for (Type v : Type.values()) {
if (v.id == id) {
return v.createInstance();
}
}
}
Он отлично работает, но мне интересно, если это Java-IST способ создания данных на основе целого идентификатора? Есть ли что-то плохое, что нужно искать?
Есть ли способ принудительного применения класса, который передается, имеет тип X без длительного условия if-else? Подумайте, когда у меня есть большое количество подклассов.
Почему вы хотите работать на целочисленных идентификаторов?
Я пишу какой-то синтаксический анализатор, поэтому мне нужно преобразовать целочисленный идентификатор, который я взял где-то в соответствующий объект.
Я думаю об этом, но он собирается стать очень длинный код, очень скоро, если у меня есть большое количество подклассов правых? – w00d
Это немного многословие, но не так долго. См. Мой отредактированный ответ для менее подробного решения. –
Вторая версия не очень отличается от моей, в чем основное преимущество? – w00d