我有一個調用各種web服務使用外部庫的proyect。這個庫給我反對這樣的:Java:相同的對象,如何避免重複的代碼
public static class ObjA {
@XmlElement(name = "counter", required = true)
protected BigInteger counter;
@XmlElement(name = "data", required = true)
protected String data;
[...]
}
這:
public static class ObjB {
@XmlElement(name = "counter", required = true)
protected BigInteger counter;
@XmlElement(name = "data", required = true)
protected String data;
[...]
}
,你可以看到objA和objB具有相同的屬性,這樣,如果我要同時使用,我已經重複碼:
public class myClass {
[...]
private ObjA a;
private ObjB b;
[...]
public void myClass() {
[...]
this.a = new ObjectFactory().createObjA();
this.b = new ObjectFactory().createObjB();
[...]
}
public void init() {
this.initA();
this.initB();
}
private void initA() {
this.a.setCounter(BigInteger.ZERO);
this.a.setData = "";
}
private void initB() {
this.b.setCounter(BigInteger.ZERO);
this.b.setData = "";
}
[...]
}
INITA和INITB是相同的,我無法訪問庫的代碼,所以我不能創建一個通用的接口,以何種方式,我可以減少重複的代碼?我的意思是,有可能有這樣的事情?
private void initObj([ObjA|ObjB] obj) {
obj.setCounter(BigInteger.ZERO);
obj.setData = "";
}
謝謝! Muchas Gracias!
編
請注意我有底層庫中沒有訪問,所以我可以不加修改類,接口,WSDL或者XSD以任何方式。 另外,在我看來並不重要,如果我使用WS與否,JAXB或其他圖書館:你可以想像ObjA和ObjB沒有註釋,像這樣:
public static class ObjA {
protected BigInteger counter;
protected String data;
[...]
}
public static class ObjB {
protected BigInteger counter;
protected String data;
[...]
}
和問題的癥結沒有按」改變。
如果你不能創建一個通用的接口(在本例中是抽象類),你必須編寫代碼來初始化'ObjA'類型和'ObjB'類型,而不管你做什麼。 – EpicPandaForce 2015-02-11 16:44:14
您可以使用動態方法(反射或BeanUtil)使用相同方法處理不同類型的數據。然而,這有很多自己的問題(靜態分析不知道它),所以我通常會遠離它。我們對上下文不瞭解,所以也可能有其他解決方案。不要忘記與API提供商交談。 – eckes 2015-02-11 20:35:55
我只想做一個超類,手工編輯生成的(猜測它只是每個類的一個地方),然後做一個閱讀我和一個什麼和爲什麼做視頻。 – tgkprog 2015-02-12 07:35:34