#java
Вопрос:
У меня есть класс Java, который точно такой же, но находится в 2 разных пространствах имен и не может быть изменен. Мне нужно преобразовать оба этих класса во внутреннее представление pojo. Есть ли способ, которым я мог бы сделать в общем виде, не копируя один и тот же код.
Для бывших:
com.namespace.first;
public ClassA {
private String a;
private String b;
}
amp;
com.namespace.second;
public ClassA {
private String a;
private String b;
}
Теперь у меня есть Pojo, которое нужно заполнить значениями, исходящими от ClassA
:
com.namespace.third
public ClassC {
private String a;
private String b;
private String d;
private String e;
}
Одним из вариантов является:
public ClassC convert(com.namespace.first.ClassA classA) {
return new ClassC(classA.getA(), classA.getB(), "c", "d");
}
public ClassC convert(com.namespace.second.ClassA classA) {
return new ClassC(classA.getA(), classA.getB(), "c", "d");
}
Есть ли другой маршрут, который я мог бы использовать вместо 2 методов преобразования, которые делают точно то же самое (хотя этот пример прост, в моем случае он намного больше)?
Ответ №1:
Может быть, что-то вроде:
public <T> ClassC convert(T classA) {
return new ClassC(classA.getA(), classA.getB(), "c", "d");
}
Комментарии:
1. Да, изначально я думал об этом , но проблема в том, что если мы не определим тип T, компилятор не будет знать, что у T есть свойства a и b
2. @user1692342 ну конечно, это так, когда вы вызываете convert, компилятор проверяет, что класс передаваемого вами объекта содержит метод
getA()
иgetB()
… попробуйте использовать этот код и скомпилировать
Ответ №2:
Если вы можете использовать библиотеки, то в Apache BeanUtils есть метод copyProperties.
public static void copyProperties(Object dest, Object orig);
Скопируйте значения свойств из исходного компонента в конечный компонент для
всех случаев, когда имена свойств совпадают.