2016-07-18 51 views
1

我hace几个.xsd,我想用JAXB生成类。相同的类不同的包和JAXB

Package: v1 
Class: JBObject 
Class: ... 

Package: v2 
Class JBObject 
Class: ... 

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

我已要求与方法翻译其他类:

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;

+0

你是什么意思的“导入”的方法? – Andreas

+0

import v1.JBObject;或导入v2.JBObject; – Regular

+0

这些是*类*的进口。你说你“必须在*方法*'translate'中导入,这是没有意义的。你是说你希望你的'Translation'类中的'translate'方法可以在任何版本的'JBObject'上工作,而不会创建两个版本的'translate'方法? – Andreas

回答

0

您有几个选项。

选项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声明。您的代码可以在一个类中处理两个版本。

+0

我有更多的getName这是一个例子。我喜欢选项2,但问题是我有+/- 100个类,所以我将不得不创建大量的接口(我有很多像使用其他对象翻译的方法)。谢谢。 – Regular

+0

而我有更多的对象,如JBObject。例如,在JBObject中,我有JBRelationObject的getJBRelationObjet()和setJBRelationObject(JBRelationObject的关系对象),那么在这种情况下我该怎么做接口呢? – Regular

相关问题