我有一个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。
那么,这有什么问题吗?
答案 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
上下文范围引用它们来访问类变量。