【问题标题】:What is the best practice to modify an object passed to a method修改传递给方法的对象的最佳实践是什么
【发布时间】:2011-03-04 10:00:16
【问题描述】:

将对象传递给方法后,我想更改其中一个字段。在 Java 中执行此任务的最佳做法是什么?

【问题讨论】:

    标签: java


    【解决方案1】:

    简单回答

    如其他答案所述,您可以简单地调用 setter 方法。

    更有哲理的回答

    通常,在创建对象之外的范围内改变对象可能很危险:

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

    也就是说,很多时候你只是想在相同的逻辑范围内封装一些逻辑,你想修改传入的对象的值。所以我会使用的规则是 只要由于所有调用代码都完全了解此类突变,因此您可以在传递对象。

    一般来说,如果你调用一个函数来改变代码库中多个位置的参数,你会发现它变得越来越容易出错,这就是函数式编程得到回报的原因。

    所以,这个故事的寓意是:如果你的调用者完全意识到这种突变,你可以改变你方法中的值,但一般来说你应该尽量避免它而是在创建它的范围内更改它(或创建一个副本)。

    【讨论】:

    • +1 表示很少使用输出参数,如果有的话。通常,您需要输出参数的良好文档,即使这样也不能保证该方法的用户知道这一事实。
    【解决方案2】:

    请注意,即使对象作为最终对象传递,它仍然可以更改。您只是不能重新分配变量,这通常是(输入/)输出参数所需要的。

    以 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
    }
    

    【讨论】:

      猜你喜欢
      • 2021-08-27
      • 1970-01-01
      • 1970-01-01
      • 2021-08-31
      • 1970-01-01
      • 2011-01-26
      • 1970-01-01
      • 2011-04-04
      • 2013-12-29
      相关资源
      最近更新 更多