Java7创建转换器,接口还是静态方法?

时间:2015-01-16 07:41:25

标签: java design-patterns interface converter static-methods

在一个项目中,我有A类,B类。我必须将A转换为B,B转换为A.转换它们有两种方法:

1-使用如下静态方法创建实用程序类:

public class converter{
    public static A convertBToA() {
        ...
    }

    public static B convertAToB() {
        ...
    }
}

2-创建这样的界面:

public interface Converter {
    public <T> T convert(Class<T> type, Object value);
}

然后通过类和覆盖转换器方法实现它,将A转换为B,反之亦然。我知道上述两种方式都是可行的,但我喜欢有一个好的设计 .So,方式更好?

备注

1 - 我使用java 7,因此Interface主体不能包含静态方法 2 - 正如immibis所述,答案取决于具体情况。但我寻找符合设计原则的方法。特别是维护和开发的最短时间。

3 个答案:

答案 0 :(得分:3)

您应该试用OrikaDozer。这些框架很好地完成了这些工作。如果它只是你需要转换的一些类,那么我认为界面会很好。另一个解决方案可能是在A中提供一个构造函数(或静态工厂方法),它接受一个B,反之亦然。

答案 1 :(得分:2)

我认为你的第二种方法有点过于笼统。 我会使用像

这样的东西
public interface Converter<Src,Dst> {
    public Dst convert(Src value);
}

然后为所需的每种类型组合制作特定的类,例如

public class ABConverter implements Converter<A,B> {
    @Override
    public B convert(A value) { ... }
}

答案 2 :(得分:-1)

是否可以设计没有类转换? 假设您将A转换为B以便在B中使用某些函数,例如。 b.sleep()。我更喜欢实现接口。

interface Runable{
    void run();
}

interface Sleepable{
    void sleep();
}


class A implements  Runable{

    @Override
    public void run() {
        //run
    }
}

class B implements  Sleepable, Runable{

    @Override
    public void run() {
        //run
    }


    @Override
    public void sleep() {
        //sleep
    }
}

也许帮助你

PS:如果我想将A转换为B,我将在B&#39的构造函数或B实例函数中执行此操作(首选,因为函数具有名称)

public class B {
    public static B instanceWithA(A a){
    //A->B
    }
}

反之亦然