Я бы предложил вам создать 2 базовых класса, 1 для сущности, 1 для VO.
Пример:
public abstract class Entity implements Serializable {
}
public abstract class AbstractVO {
}
Затем используйте шаблон Abstract Factory для фабрики каждого объекта
public AbstractFactory {
private AbstractFactory() {}
public abstract Factory getFactory(Class clazz) {
if (Entity.class.isAssignableFrom(clazz)) {
return new EntityFactory();
}
if (AbstractVO.class.isAssignableFrom(clazz)) {
return new VOFactory();
}
return null;
}
}
Я использую метод Class.isAssignableFrom()
, чтобы сказать, что подклассы можно назначать из родительского класса (что и происходит, если вы понимаете, что я пытаюсь сказать). Это хитрость здесь.
Для этого я бы сделал Фабрику для каждого объекта
public abstract Factory<T> {
public abstract T createObject();
}
public class EntityFactory extends Factory<Entity> {
public Entity createObject(Class entityClass) {
try {
return entityClass.newInstance();
} catch (Exception e) {
e.printStackTrace();
}
}
}
public class VOFactory extends Factory<AbstractVO> {
public AbstractVO createObject(Class voClass) {
try {
return voClass.newInstance();
} catch (Exception e) {
e.printStackTrace();
}
}
}
Наконец, получение объекта
Entity entity = (Entity)AbstractFactory.getFactory(Entity.class).createObject();