Java 我们有什么优点使一个私人内部类决赛?

Java 我们有什么优点使一个私人内部类决赛?,java,class,final,Java,Class,Final,我今天读了一些代码。我发现了这样的东西: public class SomeClass { ... final private class SomeHandler implements Blahblah { ... } } 因为没有人应该能够从外部访问SomeHandler,我不明白为什么我们应该将其设置为最终版本。有人有不同的见解吗?将类声明为final有两个相关但不同的目的 它告诉编译器不允许扩展此类。这样做主要是为了防止错误 它告诉读者不要

我今天读了一些代码。我发现了这样的东西:

public class SomeClass
{
    ...
    final private class SomeHandler implements Blahblah
    {
        ...
    }
}
因为没有人应该能够从外部访问SomeHandler,我不明白为什么我们应该将其设置为最终版本。有人有不同的见解吗?

将类声明为final有两个相关但不同的目的

它告诉编译器不允许扩展此类。这样做主要是为了防止错误

它告诉读者不要担心这个类会被扩展。这是为了帮助理解

在私有最终内部类的情况下,我们可以假设一个人编写或修改该类,并且他们在理解了设计之后才这样做。因此,有人错误地扩展不应该通过设计扩展的类的可能性很小

然而,阅读代码的人需要知道私有内部类可能已经被扩展,需要扫描整个Java源文件。。。除非该课程已被宣布为最终课程

因此,final可能会起到有用的作用。。。在制作设计清单以提高可读性时


另一方面,您发现的示例中的最后一个可以在没有任何特定意图的情况下添加;i、 e.它可能只是多余的。

你是在问为什么它应该是最终的,还是为什么它应该是私有的?最好的例子:它是最终的,因为作者想明确说明没有类应该扩展SomeHandler类。@CubeJockey我是在问为什么它应该是最终的。@DwB是的,这是我所能看到的唯一一件事。对于那些否决和/或试图结束这个问题的人,你能告诉我们你的理由吗?+1我只想补充一点,一个设计良好的Java类几乎总是最终的,除非它是有意通过子类来扩展的。Java语言中的类在默认情况下不是final这一事实是一个语言设计错误,它来自80/90年代的思维,即频繁滥用类继承是一个好主意。现代的工作,如有效java、实用API设计和C++设计的API设计,都建议默认地使类最终完成,并且避免一般的虚拟方法。实际上,如果在一个大类中声明一个内部类,那么在代码中搜索最后一个关键字时会有很大帮助。我以前没想过,说得好@罗盖里奥很有趣。但我记得有一次,我希望我能在某个第三方开源库中重写类中的一个方法,这是有缺陷的。我最终复制了整个类,并在自己的代码中对其进行了修改。只有精心设计是不够的,依我看。@Rogério-我不会这么说。这是意见,即使这种意见是普遍持有的。