2012-03-13 28 views
0

我有我寫了這樣的方法:如何設計我的setter方法?

void updateMyJaxb(final JAXBElement<?> jaxbElement) { 

addElementtoJaxb(jaxbElement) 
} 


void addElementTJaxb(jaxbElement) 
{ 
    //have to cast to myown type 
((JAXBElement<MyType>) jaxbElement).getValue().setSomeValue(somevalue); 
} 

所以在本質上我的一些工作人員增加的JAXBElement。 問題是:它是一個很好的設計,參考並更改內容,? 將參考返回給更新的對象會更好嗎? 否則該方法可能不易理解?

+0

等等......哪裏有問題? 'updateMyJaxb'或'addElementTJaxb'? (另外,我認爲你在代碼示例中有一些錯別字。) – cdeszaq 2012-03-13 14:52:14

回答

0

安裝人員不應該對他們直接採用的參數有任何影響。我個人認爲這是不好的設計。 如果你想這樣做,我會強烈建議你記錄這種行爲,因爲行爲可能是意外的。

返回對象也不是必需的,因爲Java通過引用傳遞參數(通常爲對象)。

我會使用Adapter模式,它將JAXBElement作爲參數並返回一個JAXBElement。 而不是更新JAXBElement,適配器克隆它並更改克隆並將其返回。 這種方式沒有引入意想不到的副作用。 這種模式也被稱爲防禦性複製。

private JAXBElement clone(JAXBElement o) { 
    JAXBElement clone = new JAXBElement(); 

    clone.setName(o.getName()); 
    ... 

    return clone; 
} 

這應該做的工作。

+0

謝謝,這是一個很好的答案,我喜歡它。在我的情況下唯一的問題是,JaxbElement不支持clone(),那麼我將如何通過克隆對象去呢? – 2012-03-13 15:40:58

+0

您的適配器可以有一個處理克隆的私有方法。 – 2012-03-13 15:44:11

+0

我還不確定如何克隆?我可以創建一個新的參考並執行任務嗎?然後返回該參考。 (我知道在那種情況下,它仍然會和以前一樣,但至少它看起來會更好一些?我只是不知道如何克隆,沒有克隆方法實現JaxbElement。 – 2012-03-13 19:19:53