在一个项目中,我有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所述,答案取决于具体情况。但我寻找符合设计原则的方法。特别是维护和开发的最短时间。
答案 0 :(得分:3)
您应该试用Orika或Dozer。这些框架很好地完成了这些工作。如果它只是你需要转换的一些类,那么我认为界面会很好。另一个解决方案可能是在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
}
}
反之亦然