关于java:为什么链接列表中的类节点定义为静态但不是普通类

Why class Node in LinkedList defined as static but not normal class

本问题已经有最佳答案,请猛点这里访问。

在Java.util.linkedlist中,类节点定义为一个静态类,是必要的吗?目标是什么?

我们可以从这页中找到源代码。


静态嵌套类的实例没有引用嵌套类的实例。基本上与将它们放在单独的文件中相同,但是如果与嵌套类的内聚力很高,将它们作为嵌套类是一个不错的选择。

但是,非静态嵌套类需要创建嵌套类的实例,并且实例绑定到该实例并具有对其字段的访问权限。

例如,以这个类为例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
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的字段,但将它们放在单独的文件中也没有意义,因为节点是LinkedList实现的一个实现细节,在该类之外没有任何用处。因此,将其作为静态嵌套类是最明智的设计选择。