2015-09-11 30 views
1

我就長話短說:使用方法爲對象分配修改後的版本 - 糟糕的做法?

public aClass[] changeClassSlightly(aClass[] ac) { 
    // changing various things in the class 
    // changes done 
    return ac; 
} 

同時,在主:

aClass test = new aClass(); 
test = changeClassSlightly(test); 

所以, 這是一個低效/看 - 下uppon或做事不規範的方式,當想要將某個類的功能實現爲不同的類?

在我的情況下,這裏所說的「ACLASS」是一個相當簡單的,但是當這些東西越做越大,同時整個對象和隨地吐痰出來稍微改變可以被認爲是不好的編程。

不是嗎? Java開發中的數據結構或常見做法是否令人感嘆?

非常感謝我的支持:)

+0

你的類型讓我困惑了一下。該方法的返回類型爲'aClass []',但是您將它視爲返回'aClass'。 – resueman

回答

0

我在這裏看到兩個不同的問題。在changeClassSlightly(...)的內部,看起來您正在討論變異ac的說法。你問題中的代碼似乎也在詢問局部變量重用,因爲test既是參數又包含由changeClassSlightly(...)返回的值的變量。

一般來說,我個人更喜歡使用不可變對象和數據結構。我也儘量避免變異的論點。見Effective Java,項目15:最小化可變性。

如果一個函數是純的,通常會更容易推理。

但是這是非常重要的問題。

至於重用局部變量:我也儘量避免這樣做,但這兩種方式都沒什麼大不了的。

0

從性能角度來看,您的代碼並不理想。如果您可以在構造函數中設置值,那麼您可以使用final字段(不可變,所以始終線程安全且容易JVM進行優化)。此外,構造函數中設置的值可以安全地讀取而不同步。如果稍後使用setter,則需要進行同步,否則將無法在其他線程中獲取新值。同步並不像以前那樣昂貴,但應儘可能避免。

我會推薦builder pattern來代替。

相關問題