Вы не можете изменить класс объекта в Java. Кроме того, вы не можете «объединить» два класса в один класс. Что вы можете сделать, это ввести общий интерфейс, но для этого вы должны владеть исходным кодом обоих классов.
Учитывая ограничение, что вы не можете изменить ни один из двух классов, тогда наилучшим вариантом для вас будет ручное преобразование ModuleA.Student
в ModuleB.Student
и обратно.
PS: в качестве альтернативы вы можете использовать отражение. Учитывая, что оба класса имеют одинаковые имена атрибутов, сопоставление одного класса с другим не должно быть проблемой.
public static <A,B> B convert(A instance, Class<B> targetClass) throws Exception {
B target = (B) targetClass.newInstance();
for (Field targetField: targetClass.getFields()) {
Field field = instance.getClass().getField(targetField.getName());
targetField.set(target, field.get(instance));
}
return target;
}
Использование:
StudentB studentB = convert(studentA, StudentB.class);
В приведенном выше примере предполагается, что все поля являются частными. Если нет, то то же самое можно сделать с помощью методов (модуль сопоставляет имена сеттеров с именами геттеров).