如何避免翻译对象中的重复代码



我有一个名为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;
    }
}

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

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