什么时候在非静态嵌套类中声明嵌套静态类是个好主意?

时间:2016-08-14 18:20:24

标签: java static-classes

我知道嵌套静态类的含义,但发现它有时会决定何时通过非静态嵌套类声明它们而感到困惑。

主要是实例化不是很好吗?

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

4 个答案:

答案 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内部类。这使代码更简单,并且内存效率更高。