簡體   English   中英

修改傳遞給方法的對象的最佳做法是什么?

[英]What is the best practice to modify an object passed to a method

將對象傳遞給方法后,我想更改其中一個字段。 在Java中執行此任務的最佳做法是什么?

簡單回答

如其他答案所述,您只需調用setter方法即可。

更哲學的答案

通常,在創建它們之外的范圍內變異對象可能很危險:

http://en.wikipedia.org/wiki/Functional_programming

也就是說,有時你只想在同一個邏輯范圍內封裝一些邏輯,你想要修改傳入的對象的值。所以我要使用的規則是, 只要所有調用代碼都是完整的知道這樣的突變 ,你可以在你傳遞對象的方法中調用對象上的setter方法(並且你應該創建一個setter方法,如果你沒有)。

一般來說,如果你調用一個函數來改變你的代碼庫中多個位置的參數,你會發現它變得越來越容易出錯,這就是函數式編程得到回報的原因。

因此,故事的寓意是:如果您的調用者完全了解此類突變,您可以更改方法中的值,但通常您應該嘗試避免它,而是在其范圍內更改它創建(或創建副本)。

請注意,即使對象作為最終傳遞,它仍然可以更改。 您無法重新分配變量,這通常是(輸入/)輸出參數所需的。

以Jigar Joshis為例:

public void increasePersonAgeByOneMonth(final Person p ){
  p = new Person(); //this won't work, which is ok since otherwise the parameter itself would not be changed by the next method
  p.setAge(((p.getAge()*12.0) + 1)/12.0); //ok
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM