在java.util.LinkedList包中,定义为一个静态类的类节点是否必要?目标是什么?
我们可以从page找到源代码。
答案 0 :(得分:4)
静态嵌套类的实例没有引用嵌套类的实例。它与将它们放在一个单独的文件中基本相同,但如果与嵌套类的内聚性很高,那么将它们作为嵌套类是一个很好的选择。
非静态嵌套分类但是需要创建嵌套类的实例,并且实例绑定到该实例并且可以访问它的字段。
例如,参加这个课程:
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
实现的实现细节,并且是在课堂之外没用。因此,使其成为静态嵌套类是最明智的设计选择。