私人建设者和最终

res*_*day 12 java

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

Mat*_*hen 14

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

  • @Hardcoded,他写道"将一切都标记为最终**,除非你有明确的理由不要**".即你只允许扩展类_designed为extensible_. (4认同)
  • 把一切都标记为最终?我认为你的意思是变量和参数.但是将所有类和方法标记为最终并不是一个好主意.这将极大地限制应用程序的可扩展性. (2认同)

Mar*_*arc 6

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

  • HotSpot确定该类是否已加载子类.如果该类被标记为"final",则没有任何区别. (7认同)
  • JIT编译器是否仍然看到该类是否加载了任何具体的子类以及是否重写了一个方法?我想在这种情况下它无论如何都可以内联,无论类/方法是否被声明为`final`.然后,我不是JIT专家,只是好奇:-) (2认同)