【问题标题】:Java generic utility method to convert between two types用于在两种类型之间转换的 Java 通用实用程序方法
【发布时间】:2015-07-21 20:15:38
【问题描述】:

我有一种方法可以在两个不同类的对象之间进行转换。 这些是 DTO 对象和休眠实体类。

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;
      }

而不是使用与DomainObject2PersistedObject2 等相同的方法.. 是否可以使用具有以下签名的通用方法?(无需传递源类和目标类)

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

PS:(一个different 主题,当实体具有相同的结构而有些人不同意尽管休眠文档和其他来源时,使用 DTO 是一种浪费)

【问题讨论】:

    标签: java spring generics


    【解决方案1】:

    要实现这一点,您需要传递您正在寻找的域对象的类。类似以下的方法会起作用:

    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。您可以尝试使用Spring的ConversionService(自动线转换服务)注册一个特殊的转换器,您可以使用convert方法达到相同的结果。

    请注意,您应该添加一些检查以确保每个实体和域对象都是兼容的,否则您最终会变得一团糟,并且您的代码容易出错。

    【讨论】:

    • 我认为应该是: BeanUtils.copyProperties(target, source) 如果您使用的是 Apache Commons(也许对 Spring 来说是正确的......)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多