2015-07-21 1 views
3

У меня есть способ преобразования между объектами двух разных классов. Это объекты DTO и классы сущности гибернации.Метод общей утилиты Java для преобразования между двумя типами

public static DomainObject1 convertToDomain(PersistedObject1 pObj) { 
     if (pObj == null) 
      return null; 
     DomainObject1 dObj = new DomainObject1(); 
     BeanUtils.copyProperties(pObj,dObj); //Copy the property values of the given source bean into the target bean. 
     return dObj; 
     } 

Вместо того, чтобы тот же метод с DomainObject2 и PersistedObject2 и так далее .. Можно ли иметь общий метод с ниже подписи? (без необходимости проходить источник и целевой класс)

public static<U,V> U convertToDomain(V pObj) { 
    ...} 

PS: (А different тема, это расточительно использовать DTO, когда объекты имеют такую ​​же структуру, что некоторые люди не согласны с, несмотря на спящем документации и других источников)

ответ

1

Для этого вам необходимо передать класс объекта Domain, который вы ищете. Что-то вроде следующего будет работать:

public static <T> T convert(Object source, Class<T> targetType) 
     throws InstantiationException, 
     IllegalAccessException, 
     InvocationTargetException { 
    if (source == null) 
     return null; 
    T target = targetType.newInstance(); 
    BeanUtils.copyProperties(source, target); 
    return target; 
} 

С учетом сказанного, как вы видите, вы уже используете Spring. Вы можете попробовать зарегистрировать специальный конвертер с функцией ConversionService Spring (услуга автоматической проводки), и вы можете использовать метод convert для достижения того же результата).

Обратите внимание, что вы должны добавить несколько проверок, чтобы убедиться, что каждый объект и объекты домена совместимы, иначе у вас будет большой беспорядок, и ваш код будет подвержен ошибкам.

Смежные вопросы