什么时候声明嵌套静态 class 而不是非静态嵌套 class 是个好主意?

When is a good idea to declare nested static class over non static nested class?

我知道 nested static 类 的含义,但发现有时在决定何时在 non static[=22= 上声明它们时会感到困惑] 嵌套 类.

主要是在实例化不是很好的情况下吗?

帮助您决定何时使用 static 修饰符的一般经验法则是什么?

您应该尽可能使用 static 字段、方法或 class,代码仍然可以正确编译和工作。

如果将代码设为静态后无法编译或无法运行,请不要将其设为静态。

始终使用静态。如果您需要从外部 class 访问成员,请使用非静态

编辑:可以在此处找到很好的解释https://sonar.spring.io/coding_rules#rule_key=squid%3AS2694|s=createdAt|asc=false

这是一个非常有趣的问题。我会尽力向你解释。

A nested class is a member of its enclosing class. Non-static nested classes (inner classes) have access to other members of the enclosing class, even if they are declared private. Static nested classes do not have access to other members of the enclosing class.

基本上,静态嵌套 class 与其顶层 class 的实例成员 交互,就像任何其他 class es.

因此,基本上您可以而且应该将静态嵌套 class 视为嵌套在另一个 顶级 class 中的顶级 class只是为了打包方便。

因此,每当您使用嵌套 class 时,首先将其设为静态,然后查看是否需要访问任何实例成员,从而有机会使其非静态。

以JDK、

为例
public class LinkedList<E> ... {
...

 private static class Entry<E> { ... }

}

在这里,Entry 是一个静态嵌套的 class,因为将此 class 作为顶级 class 没有任何意义,因为它仅供 LinkedList class 使用。而且由于它甚至不使用 LinkedList class 的任何成员,因此 使静态更有意义 .

当您不希望 class 访问顶级 class 的非静态(或实例)字段和顶级 class 不需要它的实例。

始终使用 static 内部 class,除非您不能使用非静态 class。这使代码更简单,内存效率更高。