【问题标题】:How to avoid duplicate code in the translation objects?如何避免翻译对象中的重复代码?
【发布时间】:2015-11-22 12:32:51
【问题描述】:

我有一个名为 Transformer 的超类。我有两个派生类将 A 类转换为 B 类,反之亦然。有类:

class A{
    private Long id;
    private String name;

    ... getter and setters
}

class B{
    private Long id;
    private String name;

    ... getter and setters
}

interface Transformer<S,D> {
    D convert(S source);
}

class ATransformer implements Transformer<A,B>{
    public B convert(A a){
        B b=new B();
        b.setId(a.getId());
        .....
        return b;
    }
}

class BTransformer implements Transformer<B,A>{
    public A convert(B b){
        A a=new A();
        a.setId(b.getId());
        .....
        return a;
    }
}

如您所见,派生的转换器类具有重复的代码。是否有任何设计或解决方案可以在不使用反射的情况下避免这种重复?

【问题讨论】:

  • 看来你不需要多个类。
  • A和B除了类名有什么区别?
  • @cricket_007 例如 A 是我的实体,B 是我的 dto

标签: java inheritance interface superclass


【解决方案1】:

您可以使用像 Dozerorika 这样的 bean 映射器框架来为您完成工作(并避免重复代码)。 然而,正如在其他 cmets 中已经提到的那样,(在大多数情况下)最好避免拥有几乎相同的类,而它们又不属于同一类层次结构,因此是可转换的。

【讨论】:

  • 不,orika 使用字节码生成 - 不需要反射
【解决方案2】:

创建类 C 并从 C 扩展 A 和 B 但是转换是除非因为你使用 cast :)

【讨论】:

    猜你喜欢
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 2019-02-04
    • 2011-08-29
    • 1970-01-01
    • 2015-07-30
    • 2020-08-31
    相关资源
    最近更新 更多