我有几个.xsd,我想用JAXB生成类。

Package: v1
Class: JBObject
Class: ...

Package: v2
Class JBObject
Class: ...


我使用工厂模式,如果是v1,则使用v1的类,如果是v2,则使用v2的类。
在一个版本中,我必须使用程序包1的类,在其他版本中,我必须使用程序包2的类。
生成的类相同或几乎相同。

我还有另一种叫做Translation的类,该方法带有:

import XX.JBObject;
public void translate(JBObject object)
{
    ...
    String name = object.getName();
    JBRelationObject relationObject = object.getRelationObject();
    int id = relationObject.getId();
    ...
}


JBObject在v1和v2中是同一类,但是我必须在该类中导入,并且我不想复制和粘贴两次(每次导入一次)
我该如何解决?

对于import,我的意思是:import v1.JBObject;或导入v2.JBObject;

最佳答案

您有几种选择。

选项1:使两个JBObject类都实现相同的接口。
由于它们是生成的,因此您可能无法做到这一点。

选项2:将它们与实现公共接口的适配器类包装在一起。
如果您需要在多个地方共享逻辑,这将很有用。

选项3:如果translate()方法的全部需求是JBObject.getName(),请获取名称并委托给通用代码,例如

public void translate(v1.JBObject jb1obj) {
    translate(jb1obj.getName());
}
public void translate(v2.JBObject jb2obj) {
    translate(jb2obj.getName());
}
private void translate(String name) {
    // common logic here
}


没有import语句。您的代码在一个类中处理两个版本。

09-26 12:38