У меня есть класс Forum
с некоторыми подклассами, и я сохраняю имя подкласса как поле String в базе данных вместе со всеми другими полями.Когда я получаю объект, я хочу, чтобы он был экземпляром того же класса, что и был.Я мог бы сделать много операторов if-else, чтобы найти, какой конструктор подкласса вызывать, но это было бы нелегко расширить.
Я нашел это решение, но оно кажется каким-то грязным:
public static Forum createForum(int forumId, String kind) {
try {
Class cls = Class.forName("forum."+kind);
Constructor ct = cls.getConstructor(Integer.TYPE, String.class);
Object retobj = ct.newInstance(forumId, kind);
return (Forum) retobj;
}
catch (Throwable e) {
System.err.println(e);
}
return null;
}
Есть ли лучшее решение?
Спасибо.