2016-07-18 49 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

相關問題