0

一个类的方法冗余地返回该类的修改后的全局字段在 Java 中是一种好习惯吗?

注意:我编辑了下面的示例以更正我的代码。

例如:

public class MyClass {
    private String veryImportantString;

    public static void main(String [] args) {
        MyClass myObject = new MyClass();
        myObject.fieldQuestion();
    }

    public void fieldQuestion() {
        veryImportantString = "Hello, StackOverflow";
        String newString = addStringToVeryImportantString(" World!");
        System.out.println(newString);      
    }

    public String addStringToVeryImportantString(String inputStr) {
        this.veryImportantString = veryImportantString + inputStr;

        return veryImportantString;
    }
}

在上面的示例中,addStringToVeryImportantString 正在返回veryImportantString,尽管它作为一个类字段已被修改并且对调用方法全局可用。

在下面的示例中,我做同样的事情而不返回该字段:

public class MyClass {
    private String veryImportantString;

    public static void main(String [] args) {
        MyClass myObject = new MyClass();
        myObject.fieldQuestion();
    }

    public void fieldQuestion() {
        veryImportantString = "Hello, StackOverflow";
        addStringToVeryImportantString(" World!");            
        String newString = veryImportantString;
        System.out.println(newString);
    }

    public void addStringToVeryImportantString(String inputStr) {
        this.veryImportantString = veryImportantString + inputStr;
    }
}

我的问题是:重要吗?在编码标准、可读性、效率等方面有什么不同吗?在某种程度上,永远不要返回一个函数已修改的全局类字段是有意义的,因为这有什么意义呢?无论如何,该字段都可用。另一方面,返回字段可能是有意义的,以表明该函数的主要目的是修改该字段并返回值。

感谢您的输入。

4

2 回答 2

3

它是一种方法的常用编码标准,它要么改变对象(或变量),要么获取有关它的信息,但从不两者兼而有之。因此,乍一看将假定具有返回的方法没有任何次要影响(例如更改veryImportantString)。这不是一条硬性规定,有很多理由可以打破它,但决不能轻易打破它。

其次,第二个片段中的方法签名(返回无效)只能合理地做一件事;更改非常重要的字符串。但是有了回报,它可以做两件事;更改veryImportantString 并将其返回或返回基于veryImportantString 的单独字符串。由于无效签名不那么模棱两可,因此它是可取的(除非有特定的理由不这样做)

于 2013-08-10T23:29:41.550 回答
0

对于您的示例,它并不是特别重要。

通常,当您拥有私有数据和公共方法时。将信息发送给与私有数据相关的类实例的用户的唯一方法是通过从公共方法返回某些内容。请记住,大多数 Java 程序要复杂得多,并且需要返回与私有字段(例如 java bean)相关的数据更为常见。

于 2013-08-11T00:36:21.833 回答