0

我有一个 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”,以及构造函数将参数标记为与其正在构造的变量相同的名称。setter 也做同样的事情——使用与其设置的变量名称相同的参数名称,并使用 this.name。

那么,这有什么问题吗?

4

4 回答 4

3

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

于 2013-01-18T23:03:22.353 回答
1

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

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

  • 避免名称泛滥
  • "this."如果名称以:)开头,则 Eclipse 开始自动完成名称
于 2013-01-18T23:02:49.967 回答
1

不,这根本不是问题。这些只是变量名。左值和右值将保持其唯一性。

于 2013-01-18T23:04:09.843 回答
1

您所看到的是非常标准的 Java 实践,甚至在Java 语言规范中提到:

如果声明为局部变量的名称已声明为字段名称,则该外部声明在整个局部变量的范围内被遮蔽(第 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上下文范围引用它们来访问类变量。

于 2013-01-18T23:04:41.590 回答