我们将 private inner class 设为 final 有什么好处?

What merits do we have making a private inner class final?

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

public class SomeClass
{
    ...
    final private class SomeHandler implements Blahblah
    {
        ...
    }
}

既然没有人能够从外部访问 SomeHandler,我不明白我们为什么要访问 final。有人有不同的见解吗?

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

  1. 它告诉编译器"do not allow this class to be extended"。这样做主要是为了防止出错。

  2. 它告诉reader"do not worry that this class might be extended"。这是为了帮助理解。

private final 内部 class 的情况下,我们可以假设一个人编写或修改 class 并且他们在了解设计后进行。因此,有人错误地扩展了不应扩展(按设计)的 class 的可能性很小。

然而,阅读代码的人需要知道 private 内部 class 可能已经扩展需要扫描整个 Java 源文件...除非 class 已声明 final.

因此 final 可能会起到一个有用的作用...使设计清单提高可读性。


另一方面,您发现可能示例中的final是在没有任何特定意图的情况下添加的;即它可能只是 "redundant".