将对象传递给方法后,我想更改其中一个字段。在Java中执行此任务的最佳做法是什么?
答案 0 :(得分:14)
如其他答案中所述,您只需调用setter方法即可。
通常,在创建它们之外的范围内变异对象可能很危险:
http://en.wikipedia.org/wiki/Functional_programming
也就是说,有时你只想在同一个逻辑范围内封装一些逻辑,你想要修改传入的对象的值。所以我要使用的规则就是因为所有调用代码都完全知道这样的突变,你可以在你传递的方法中调用对象上的setter方法(如果你没有,你应该创建一个setter方法)对象
一般来说,如果你调用一个函数来改变你的代码库中多个位置的参数,你会发现它变得越来越容易出错,这就是函数式编程得到回报的原因。
因此,故事的寓意是:如果您的调用者完全了解此类突变,您可以更改方法中的值,但一般情况下您应该尽量避免使用而是在创建它的范围内更改它(或创建一个副本)。
答案 1 :(得分:0)
请注意,即使对象作为最终传递,它仍然可以更改。您无法重新分配变量,这通常是(输入/)输出参数所需的。
以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
}