請記住,使用您的代碼,您實際上並未傳遞ObjectA
。也就是說,您將參考類型傳遞給ObjectA
,因此在性能註釋中,傳遞String
對象引用和ObjectA
對象引用之間的差異可以忽略不計。
的方式我會寫它
我會通過整個對象,如果該方法是恰當的類。我的推理是儘可能地分解課堂知識。我的意思是以下。
public void doSomethingRelatedToTheClass(String param)
{
// Do something with param.
}
我的第一個批評是這種方法假定輸入是正確的字段。我的第二個,就是現在,這個類調用此代碼需要知道一點點關於這個方法,因爲它有這樣稱呼它:
doSomethingRelatedToTheClass(myObject.getValue());
而這句話的意思是,如果你發現另一的ObjectA
成員工作這個方法裏面更好,或者您要訪問的ObjectA
其他成員,並更改doSomething()
,以反映這種變化,你也需要改變方法調用,以:通過傳遞
doSomethingRelatedToTheClass(myObject.getOtherValue(), myObject.getValue());
所以整個對象,將這些細節抽象出來,並且該方法可以處理它;即:
doSomethingRelatedToTheClass(myObject); // Doesn't need to know what you do with it.
public void doSomethingRelatedToTheClass(ObjectA object)
{
String val = object.getValue();
String otherVal = object.getOtherValue();
}
當更改一個類,在其他類別的變化的結果,這就是所謂的Shotgun Surgery反模式。
編輯
我有機會在這裏查看我的回答,我已經修改了我原來的答覆略有因爲我相信它不是爲所有情況下的最佳解決方案。如上所述,如果某個方法與某個類具體相關,那麼該類(或者更優選地,其超類或實現的接口[s])的實例應該是參數。
現在不是這種情況的時候,功能可能是通用的。泛型函數的一個例子可能是:
public String[] findNouns(String sentence);
在這種情況下,發現在一個句子中的名詞可能適用於大量的使用案例,而不僅僅是你所定義的用例。因此,傳遞價值是唯一明智的方法,因爲否則,你將兩個邏輯連接在一起,這兩個邏輯沒有直接的關係。名詞和你定義的任意對象的發現。
總結
我覺得第一個選項是更好..外部世界不需要知道你的函數內部與對象..這樣做(即哪些領域它訪問。) – TheLostMind
這完全是你的需要。如果您不希望其他方法修改對象的字段,則不要傳遞對象引用。只需傳遞所需的值。如果不是,那麼最好傳遞對象引用,並在需要時使用它的值,而不是在方法調用中添加那麼多參數。 – SudoRahul
這是一個很好的做法,使代碼儘可能簡單易懂和清晰。在這種情況下,我懷疑沒有性能差異,或者它太小而無法衡量。 –