繁体   English   中英

最佳实践-建设者和二传手

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM