Преобразуйте 2 точных Pojo, но с разными пространствами имен в общем виде

#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);
 

Скопируйте значения свойств из исходного компонента в конечный компонент для
всех случаев, когда имена свойств совпадают.

https://commons.apache.org/proper/commons-beanutils/apidocs/org/apache/commons/beanutils/BeanUtils.html#copyProperties-java.lang.Объект-java.lang.Объект-