Java 最佳实践--构造函数和设置器

Java 最佳实践--构造函数和设置器,java,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 =

我有一个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


那么,这有什么问题吗?

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

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

  • 避免人名激增
  • 如果名称以“this”开头,Eclipse将开始自动完成该名称。:)

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

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

      • 避免人名激增
      • 如果名称以“this”开头,Eclipse将开始自动完成该名称。:)

        • 这是我喜欢的方式。否则,您将不得不为输入参数想出不同的任意名称,这将成为一个难题。

          这是我首选的方法。否则,您将不得不为输入参数想出不同的任意名称,这将成为一个难题。

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

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

          您所看到的是相当标准的Java实践,甚至在:

          如果声明为局部变量的名称已声明为字段 名称,则该外部声明在整个 局部变量的作用域。类似地,如果已声明名称 作为变量或参数名,则外部声明为 在局部变量的整个范围内隐藏(前提是 根据的规则,阴影不会导致编译时错误 §14.4.2). 有时可以使用 适当限定的名称

          例如,关键字this可用于访问阴影字段 x、 使用表单this.x。事实上,这个成语通常出现在英语中 建造商(§8.8):

          在本例中,构造函数接受具有相同属性的参数 名称作为要初始化的字段。这比不得不这么做更简单 为参数发明不同的名称,这样就不会太混乱了 这种风格化的背景。然而,总的来说,它被认为很差 样式使局部变量与字段具有相同的名称


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

          您所看到的是相当标准的Java实践,甚至在:

          如果声明为局部变量的名称已声明为字段 名称,则该外部声明在整个 局部变量的作用域。类似地,如果已声明名称 作为变量或参数名,则外部声明为 在局部变量的整个范围内隐藏(前提是 根据的规则,阴影不会导致编译时错误 §14.4.2). 有时可以使用 适当限定的名称

          例如,关键字this可用于访问阴影字段 x、 使用表单this.x。事实上,这个成语通常出现在英语中 建造商(§8.8):

          在本例中,构造函数接受具有相同属性的参数 名称作为要初始化的字段。这比不得不这么做更简单 为参数发明不同的名称,这样就不会太混乱了 这种风格化的背景。然而,总的来说,它被认为很差 样式使局部变量与字段具有相同的名称


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

          为什么不测试一下您的方法,自己看看?!(无论如何:代码完全正确。)只是一个标准Java样板。其他基于JVM的语言也有帮助,但这几乎是Java中的所有内容。为什么会有什么问题呢?它编译吗?它跑吗?如果它没有坏,就不要修理它!如果这是java,我认为它很好。@sdir,这些方法在我正在做的小初学者项目中工作得很好,我只是想知道这样设置的setter和constructor是否会导致任何长期问题,为什么不测试一下你的方法,自己看看?!(无论如何:代码完全正确。)只是一个标准Java样板。其他基于JVM的语言也有帮助,但这几乎是Java中的所有内容。为什么会有什么问题呢?它编译吗?它跑吗?如果它没有坏,就不要修理它!我
          class Pair {
                  Object first, second;
                  public Pair(Object first, Object second) {
                          this.first = first;
                          this.second = second;
                  }
          }