Generic - 调用参数

时间:2017-04-21 07:19:51

标签: java

大约有6个POJO类(域实体,DTO,DMO)都有几乎相同的字段。要从一个objec转换到另一个objec,我传递一个对象并调用它的getter将它设置在另一个对象中。

private UserTemp convertDmoToUserTempEntity(final UserDmo userDmo) {
    final UserTemp userTemp = new UserTemp();
    userTemp.setUsername(userDmo.getUsername());
    userTemp.setPassword(userDmo.getPassword());
    userTemp.setStatus(userDmo.getStatus());
    return userTemp;
}

private UserDmo convertEntityToUserDmo(final UserTemp userTemp) {
    final UserDmo userDmo = new UserDmo();
    userDmo.setUserId(userTemp.getUserId());
    userDmo.setUsername(userTemp.getUsername());
    userDmo.setStatus(userTemp.getStatus());
    return userDmo;
}

有很多这样的转换,比如从一个实体到另一个实体,DTO到DMO,DMO到DTO等。我相信更好的处理方法是泛型,传递源对象和目标对象。

public static <E, T> T convert(E e, T t) {
    //call getter of source object to set it in destination object.
    return t;
}

UserConverterImpl.convertFromTempToUser(userTemp, user);

我需要帮助。当我在参数中传递对象时,我需要一种方法。有没有更好的方法来实现这个目标?

2 个答案:

答案 0 :(得分:2)

您可以尝试使用框架。过去我曾用Dozer来做这件事。

在以下文章中,还提到了其他框架 any tool for java object to object mapping?

(一些建议:在映射JPA实体对象时,注意框架自动映射的惰性字段)

也许您不希望/不能使用单独的框架无论出于何种原因。 由于您似乎有严格的分层,因此您可能会为每个图层设置映射器。然后我会为每个对象单独映射。通过这种方式,您可以轻松地计算出从用户名到userId等的映射。层中所有对象的方法名称完全相同的可能性并不高,并且可能无论如何都会发生变化。

答案 1 :(得分:0)

使用Spring的BeanUtils结束。

BeanUtils.copyProperties(Object source, Object target)