私人建设者和最终

时间:2010-06-02 09:33:33

标签: java

为什么将仅使用私有构造函数的类标记为final是一个好习惯?我的猜测是,让其他程序员知道它不能被分类。

5 个答案:

答案 0 :(得分:14)

除非你有明确的理由不这样做,否则通常会考虑(例如由Josh Bloch和C#的设计师)将所有内容标记为最终版本。假设你的意思是类,你是正确的,只有私有构造函数的类不能被子类化。因此,最终可能被认为是多余的,但正如你所说它对文档有价值。正如马克所说,它也可能有助于优化。

答案 1 :(得分:6)

使类最终有一些(小)性能增益,因为JIT编译器可以内联该类的功能。我不知道这是否符合'良好做法',但我看到了优势。

答案 2 :(得分:4)

你的意思是“带有私有构造函数的”你呢?

最后一堂课不能被分类。这可能代表设计决策。并非所有类都设计为子类,因此如果不是,则最好明确标记,以避免以后出现细微的错误。

只有私有构造函数的类不能被外部世界实例化(既不是子类)。这可能对例如您想要控制创建类的哪些实例的单例或类。例如。在Java5之前,typesafe enum模式使用了它。

答案 3 :(得分:2)

我们通过将构造函数设置为private来将类标记为final类,以避免子类化。

如果我们不希望人们覆盖我们的类方法并更改功能或将函数添加到我们的类中,这是一种很好的做法。

例如,类String和Math是最终类,我们无法扩展或子类,这是为了确保没有人会改变他们的行为。

答案 4 :(得分:1)

具有私有构造函数的最终类:

  • Class不能有子类,我们不能扩展最终类。
  • 具有私有构造函数的类,我们无法创建该类的对象。

这意味着该类的其他方法将是静态的,因此类可以访问它们。