繁体   English   中英

私有构造函数和最终

[英]private constructor and final

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

除非您有明确的理由不这样做,否则通常(例如,Josh Bloch和C#的设计师)认为将所有内容标记为最终值是一种好习惯。 假设您的意思是类,则正确的是不能仅继承具有私有构造函数的类。 因此,最终版本可能被认为是多余的,但是正如您所说的,它对于文档记录很有用。 正如Marc建议的那样,它也可能有助于优化。

将类定为final具有一些(小的)性能提高,因为JIT编译器可以内联该类的功能。 我不知道这是否符合“良好做法”的条件,但是我看到了好处。

您的意思是“带有私有构造函数的 ”吗?

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

带有私有构造函数的类只能由外界实例化(两者都不能被子类化)。 这对于例如单例或要控制创建类实例的类可能很有用。 例如,在Java5之前, 类型安全枚举模式使用了它。

我们通过将构造函数设为私有来将类标记为最终类,以避免子类化。

在我们不希望人们覆盖我们的类方法并更改功能或将功能添加到我们的类的情况下,这是一个好习惯。

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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