我知道嵌套静态类的含义,但发现它有时会决定何时通过非静态嵌套类声明它们而感到困惑。
主要是实例化不是很好吗?
帮助您决定何时使用静态修饰符的一般经验法则是什么?
答案 0 :(得分:2)
始终使用静态。如果需要访问外部类的成员,请使用非静态
编辑:可在此处找到一个很好的解释https://sonar.spring.io/coding_rules#rule_key=squid%3AS2694|s=createdAt|asc=false
答案 1 :(得分:2)
这是一个非常有趣的问题。我会试着向你解释一下。
嵌套类是其封闭类的成员。非静态嵌套 类(内部类)可以访问封闭的其他成员 类,即使它们被宣布为私有。静态嵌套类不会 可以访问封闭类的其他成员。
基本上,静态嵌套类与其顶级类的实例成员交互,就像任何其他类一样。
因此,基本上你可以而且应该将静态嵌套类视为顶级类,它只是为了便于打包而嵌套在另一个顶级类中。
因此,无论何时使用嵌套类,首先使其成为静态,然后查看是否需要访问任何实例成员,从而有机会使其成为非静态。
以JDK为例,
public class LinkedList<E> ... {
...
private static class Entry<E> { ... }
}
这里,Entry
是一个静态嵌套类,因为它没有任何意义使这个类成为顶级类,因为它仅由LinkedList
类使用。由于它甚至不使用LinkedList
类的任何成员,因此制作是静态的更有意义。
答案 2 :(得分:0)
您应该尽可能使用static
字段,方法或类,代码仍然可以编译并正常工作。
如果代码在静态时无法编译或无效,请不要将其设置为静态。
答案 3 :(得分:0)
当您不希望班级访问顶级班级的非静态(或实例)字段且您不需要顶级班级时,您会使用静态班级它的一个实例。
除非您不能使用非静态类,否则始终使用static
内部类。这使代码更简单,并且内存效率更高。