为什么LinkedList中的类节点被定义为静态而不是普通类
这个问题在这里已经有了答案:
静态嵌套类的实例没有引用嵌套类的实例。 它与将它们放在单独的文件中基本相同,但如果嵌套类的内聚性很高,则将它们作为嵌套类是一个不错的选择。
非静态嵌套分类需要创建嵌套类的实例,实例绑定到该实例并有权访问它的字段。
例如,参加这个课程:
public class Main{
private String aField = "test";
public static void main(String... args) {
StaticExample x1 = new StaticExample();
System.out.println(x1.getField());
//does not compile:
// NonStaticExample x2 = new NonStaticExample();
Main m1 = new Main();
NonStaticExample x2 = m1.new NonStaticExample();
System.out.println(x2.getField());
}
private static class StaticExample {
String getField(){
//does not compile
return aField;
}
}
private class NonStaticExample {
String getField(){
return aField;
}
}
静态类StaticExample
可以直接实例化,但不能访问嵌套类Main
的实例字段。 非静态类NonStaticExample
需要一个Main
实例才能实例化并可以访问实例字段aField
。
回到你的LinkedList
示例,它基本上是一个设计选择。
Node
实例不需要访问LinkedList的字段,但将它们放入单独的文件中也没有意义,因为Node是LinkedList
实现的实现细节,并且在该类之外没有用处。 所以使它成为一个静态嵌套类是最明智的设计选择。
上一篇: Why class Node in LinkedList defined as static but not normal class