【问题标题】:Altering fields via return values vs. altering fields by referencing them within methods?通过返回值更改字段与通过在方法中引用它们来更改字段?
【发布时间】:2015-05-08 22:04:36
【问题描述】:

假设我有一个私有整数 x 作为类示例中的一个字段,我想将此整数设置为 1。目前我有两种方法:

//Choice 1
public class Example{

    private int x;

    // Class Constructor
    public Example(){

        x = setX();

    }

    private int setX(){

        return 1;

    }

}

//Choice 2
public class Example{

    private int x;

    // Class Constructor
    public Example(){

        setX();

    }

    private void setX(){

        x = 1;

    }

}

我想知道哪种方式在空间和时间方面是最佳的,或者它是否重要。如果差异可以忽略不计,最佳做法是哪种方式?

在同样的意义上,当我想要一个方法使用一个类字段时,是将该字段作为参数传递还是只在方法中引用它更好?

【问题讨论】:

  • 最佳实践是在构造函数中初始化类属性,如下x=1
  • 我不应该将函数命名为 setX,因为它对我的问题有点误导;我比较关心一般会改变类字段的任何方法。

标签: java performance methods field parameter-passing


【解决方案1】:

关于问题的最后一部分:对象的方法可以访问对象的状态。将其作为参数传递是不必要的。

关于第一部分:您展示的替代品的最大问题并不是选择哪一个。最大的问题是命名。

一个名为setX() 的方法有望设置x 的值。 Java 开发人员会期望这样的 setter 接受参数。一个名为setX() 的方法不设置任何内容但返回一个计算值,而应该将其称为getSomeValue()computeSomeValue()

【讨论】:

  • 我明白你在说什么。我选择的名称是为了使其尽可能简单,但是考虑到任何用于更改字段变量并且不是 setter 的方法,是否有最佳选择?
  • 如果该方法计算单个字段值,我更喜欢第一种解决方案:它可以更轻松地测试此方法,将其提取到另一个类,在另一个上下文中重用它,或者初始化另一个字段。
猜你喜欢
  • 2018-02-24
  • 2022-12-23
  • 1970-01-01
  • 1970-01-01
  • 2022-01-14
  • 1970-01-01
  • 2019-06-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多