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

Parameters 将类实例变量作为参数传递,parameters,parameter-passing,instance-variables,Parameters,Parameter Passing,Instance Variables,这就是我一直在思考的一个设计问题,没有找到令人信服的信息 假设我的类中有一些实例变量,现在想象一下我想用这个值为我的类编写一些私有功能。写这样的东西不是问题: public class Example{ private String attribute1; public void setAttribute1(String att){ this.attribute1 = att; } private void processAttribute(

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

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

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);
    }

}

集思广益。

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

因为这里不需要传递方法参数,所以实现它似乎不符合逻辑。顺便说一句,这是我个人的观点,其他人可能会有不同的想法

然而,许多医生说,我们应该尽量限制使用全球疫苗 变量

我想你误解了这个概念。通常,全局变量是那些声明为
公共静态的
,以便可以从应用程序的任何其他部分直接访问的变量

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

因此,我看不出这两种不同代码之间有多大区别


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

许多反对全球国家的观点也适用于此:

  • 如果在processAttribute方法之外的其他地方使用该属性,则很难对程序的正确性进行推理
  • 使用全局状态的代码更难并行化:如果在处理属性时修改了属性,会发生什么
  • 更多:

另一方面,它是一个私有方法,只要满足类的约定,您就可以随意实现它。

这不是全局变量的情况,第一种样式是正确的样式。要成为全局变量,您需要将变量
设置为public static
或类似的东西。很明显,他不需要传递它。问题是什么是最佳设计。这是类示例的一个属性。如果它被声明为公共静态,那么你可以认为它是一个全局变量。然而,正如@Goatcat所说,这是一个设计术语,不管你想给它取什么名字。@XtremeBiker我同意你的观点,但是声明全局变量的一般方法与我在前面的评论中指定的一样。这里有另一个SO链接供您参考:错误。。类变量不是您所想的。。。静态变量称为类变量我同意你的看法,这是编码人员的个人选择,两者之间没有太大区别。现在,想象一个更复杂的类,其中可以同时运行不同的线程。我看不出这两个实现之间有任何性能差异,这正是我想要达到的点。那么,在你看来,我应该在这里使用参数吗?就我个人而言,我喜欢尽可能地保持所有内容的局部性,但有时使用实例或静态属性更有意义。