我知道嵌套静态类的含义,但有时在决定何时对非静态嵌套类进行声明时会感到困惑。
主要是在实例化不是很好的时候吗?
一般的经验法则是什么帮助你决定何时使用静态修饰语?
发布于 2016-08-14 18:37:28
这是一个非常有趣的问题。我会尽力向你解释的。
嵌套类是其封闭类的成员。非静态嵌套类(内部类)可以访问封闭类的其他成员,即使它们被声明为私有。静态嵌套类不能访问封闭类的其他成员。
基本上,静态嵌套类与其顶级类的实例成员进行交互,就像任何其他类一样。
因此,基本上,您可以并且应该将静态嵌套类视为顶级类,该类嵌套在另一个顶级类中,只是为了便于打包。
因此,每当您使用嵌套类时,首先使其为静态,然后查看是否需要访问任何实例成员,从而有机会使其成为非静态的。
以JDK为例,
public class LinkedList<E> ... {
...
private static class Entry<E> { ... }
}在这里,Entry是一个静态嵌套类,因为这个类作为顶级类没有任何意义,因为它仅由LinkedList类使用。而且,由于它甚至不使用LinkedList类的任何成员,因此making是静态的,因此更有意义。
发布于 2016-08-14 18:26:52
总是用静态的。如果需要从外部类访问成员,请使用非静态
编辑:在这里可以找到一个很好的解释,key=squid%3AS2694|s=createdAt|asc=false
发布于 2016-08-14 18:25:38
如果可以的话,您应该使用static字段、方法或类,并且代码仍然正确编译和工作。
如果代码不编译或不工作,如果您使它是静态的,不要使它是静态的。
https://stackoverflow.com/questions/38945225
复制相似问题