将类实例变量作为参数传递

时间:2013-06-26 07:21:40

标签: parameters parameter-passing instance-variables

这是一个我一直在考虑的设计问题,却没有找到令人信服的信息。

假设我的类中有一些实例变量,现在想象我想为我的类编写一些私有功能,使用该值。写这样的东西不是问题:

public class Example{

    private String attribute1;

    public void setAttribute1(String att){
        this.attribute1 = att;
    }

    private void processAttribute(){
        //do something with attribute1
    }

    public void executeExample(){
        processAttribute();
    }

}

processAttribute()内部使用attribute1值的位置。但是,许多医生说我们应该尝试限制全局变量的使用。写这样的东西会是一种更可重复且设计良好的方式吗?

public class Example{

    private String attribute1;

    public void setAttribute1(String att){
        this.attribute1 = att;
    }

    private void processAttribute(String att){
        //do something with attribute1
    }

    public void executeExample(){
        processAttribute(this.attribute1);
    }

}

汇集您的想法。

3 个答案:

答案 0 :(得分:2)

许多针对全球国家的论点也适用于此:

  • 如果在processAttribute方法之外的其他地方使用该属性,则更难推断程序的正确性
  • 并行化使用全局状态的代码更难:如果在处理属性时修改属性会发生什么?
  • 更多:http://c2.com/cgi/wiki?GlobalVariablesAreBad

另一方面,这是一种私人方法,只要你履行了课程的合同,你就可以自由地实施它。

答案 1 :(得分:1)

首先,attribute1不是全局属性,它只是一个类变量。类变量将在所有类方法中使用,使用此操作,因此您无需将它们作为方法参数传递。

由于不需要在此处传递方法参数,因此实现它似乎不合逻辑。顺便说一下,这是我个人的观点,其他人可能会有不同的想法。

答案 2 :(得分:1)

  

然而,许多医生说我们应该尝试限制全球的使用   变量

我认为你误解了这个概念。通常全局变量是声明为public static的变量,因此可以直接从应用程序的任何其他部分访问它。

因此,在您的两个示例中,变量attribute1不是全局变量。它只是该类的成员变量。

因此,我认为两种不同的代码之间没有太大区别。

如果设计是固定的,那么我认为最好使用第一个设计使其更具可读性。如果将来有其他机会将其他变量作为参数而不是成员变量发送,那么您可以使用第二个实现。 (虽然我认为这完全取决于编码人员的个人选择)