最佳实践 - 构造函数和安装程序

时间:2013-01-18 22:59:06

标签: java

我有一个IDE可以用来自动创建实例变量的构造函数和setter,但我想知道它创建它们的方式是否可能不是最佳实践。这是它的作用:

private String partNum;
private String partDesc;
private int quant;
private double price;

public Invoice( String partNum, String partDesc, int quant, double price )
{
    this.partNum = partNum;
    this.partDesc = partDesc;
    this.quant = quant;
    this.price = price;
}

我担心的是'this.name'这个问题,以及构造函数将参数标记为与它构造的变量相同的名称。 setter也做同样的事情 - 使用与它设置的变量名称相同的参数名称,并使用this.name。

那么,这有什么问题吗?

4 个答案:

答案 0 :(得分:3)

这是我的首选方式。否则,您将不得不考虑输入参数的不同任意名称,这会变成麻烦。

答案 1 :(得分:1)

不,没有错。 this关键字解决了歧义,因为它告诉编译器您设置的l值是成员变量(es.this.partNum)而不是输入参数(partNum)。

如果这是一种不好的做法,那更多的是个人品味。有些人不喜欢为成员变量和输入参数使用相同的名称。我个人经常使用它有几个原因:

  • 避免名字激增
  • 如果名称以"this."开头,则Eclipse开始自动填充名称:)

答案 2 :(得分:1)

没有。这根本不是问题。这些只是变量名称。左值和右值将保持其独特性。

答案 3 :(得分:1)

您所看到的是非常标准的Java实践,甚至在Java Language Specification中提及:

  

如果声明为局部变量的名称已声明为字段   name,然后该外部声明在整个过程中被遮蔽(第6.3.1节)   局部变量的范围。同样,如果已经声明了名称   作为变量或参数名称,那么外部声明是   在整个局部变量的范围内被遮蔽(前提是   阴影不会导致规则下的编译时错误   §14.4.2)。有时可以使用a访问带阴影的名称   适当的名字。

     

例如,关键字this可用于访问阴影字段   x,使用this.x形式。实际上,这个成语通常出现在   构造函数(§8.8):

class Pair {
        Object first, second;
        public Pair(Object first, Object second) {
                this.first = first;
                this.second = second;
        }
}
  

在此示例中,构造函数采用具有相同参数的参数   name作为要初始化的字段。这比必须简单   为参数创建不同的名称,并且不会太混乱   这个风格化的背景。但总的来说,它被认为很差   样式以使局部变量具有与字段相同的名称。

当方法的局部变量与类变量同名时,它们会有效地“遮蔽”或隐藏这些变量。但您仍然可以通过this上下文范围引用它们来访问类变量。