[英]Best Practices — Constructors and Setters
我有一个IDE,可以用来为实例变量自动创建构造器和设置器,但是我想知道它创建它们的方式是否不是最佳实践。 这是它的作用:
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”,也是构造函数将参数标记为与其正在构造的变量相同的名称。 设置器也做同样的事情-使用与其设置的变量名称相同的参数名称,并使用this.name。
那么,这有什么问题吗?
那是我的首选方式。 否则,您将不得不为输入参数考虑不同的任意名称,这将带来麻烦。
不,没有错。 this
关键字解决了歧义,因为它告诉编译器您正在设置的l值是成员变量(例如this.partNum)而不是输入参数(partNum)。
如果这是一个不好的做法,那更多的是个人喜好。 有些人不喜欢为成员变量和输入参数使用相同的名称。 就我个人而言,出于多种原因,我经常使用它:
"this."
开头,则Eclipse开始自动填充名称"this."
:) 不,那完全不是问题。 这些只是变量名。 左值和右值将保持其唯一性。
您所看到的是相当标准的Java惯例,甚至在Java Language Specification中也提到了:
如果已经声明为局部变量的名称已经声明为字段名称,则该外部声明在局部变量的整个范围内都会被遮盖(第6.3.1节)。 同样,如果已经将名称声明为变量或参数名称,则在局部变量的整个范围内都会对外部声明进行阴影处理(前提是根据§14.4.2的规则,阴影处理不会导致编译时错误)。 。 有时可以使用适当的限定名称来访问带阴影的名称。
例如,关键字this可以用于访问阴影字段x,格式为this.x。 确实,这种习语通常出现在构造函数中(第8.8节):
class Pair {
Object first, second;
public Pair(Object first, Object second) {
this.first = first;
this.second = second;
}
}
在此示例中,构造函数采用与要初始化的字段具有相同名称的参数。 这比必须为参数发明不同的名称要简单,并且在这种风格化的上下文中也不会太混乱。 但是,一般而言,具有与字段同名的局部变量被认为是较差的样式。
当方法的局部变量与类变量具有相同的名称时,它们将有效地“阴影”或隐藏这些变量。 但是您仍然可以通过this
上下文范围引用它们来访问类变量。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.