【问题标题】:Java naming convention for 'private final' class fields & their use'private final' 类字段的 Java 命名约定及其使用
【发布时间】:2017-08-28 11:19:31
【问题描述】:

我正在审查我的一位资深同事编写的一些代码。在单元测试类中,他像这样使用private final 类变量:

public class SomeProcessingServiceUT {
    private final String modelNumber = "ABC01";
    private final String serialNumber = "000002";
    private final String PrimaryId = "15033520583";
    private final String CheckinTime ="20021010:00-05";
.....
}

而他所做的只是访问所有这些变量,例如 this.modelNumber 等等。

我想质疑他为什么不使用静态声明纯常量以及为什么使用这种混合命名的意图。但我想在这里也与社区分享我的疑问。这有点令人困惑。任何智慧都会有所帮助。

【问题讨论】:

  • 你问过他吗?
  • @Jacob 我很快就会问他。但我想先知道这是否是一种不好的做法?
  • 仅凭这段代码很难猜出你同事的意图。断章取义,这看起来很愚蠢,但他很可能有他的理由。不要犹豫,问他。
  • 如果他只想读取声明类实例中的字段,那么我认为没有理由将它们设为静态。在我看来,使用 final 必须被视为对 Java 约定的良好使用。

标签: java naming-conventions compile-time-constant


【解决方案1】:

关键字 static 不会使其成为常量,它用于附加在类而不是对象上的变量。简单地说:变量的值对于您创建的每个对象都是相同的。问题是,如果你说 classname.variable,你可以改变这个变量的值,因此它不是一个常量变量。

一般来说,您希望避免使用静态,它不一定是糟糕的编程,但如果您不绝对需要,则不应使用它。此外,几乎不会出现需要静态变量的情况,并且在大多数情况下,通过更好的类设计可以避免这种情况。

要回答您的问题,不,将该变量声明为静态变量并没有多大意义,但我在这里可能是错的,因为我不知道他还想对这个类做什么。

【讨论】:

  • 有人否决了您的回答。我同意你的观点,不应该为了内存泄漏而滥用静态。但是与您所说的相反,当有大量对象实例使用它们时,静态以及私有和最终用于创建应用程序范围的常量。
  • 是的,我犯了一个错误,当然你可以使用静态来创建一个常量,但我真正的意思是关键字 static 不会使它成为 final 的工作的常量变量。
猜你喜欢
  • 2011-06-09
  • 1970-01-01
  • 2020-01-31
  • 2022-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-02
  • 2018-11-22
相关资源
最近更新 更多