为什么LinkedList中的Node类定义为静态类而非普通类

时间:2017-01-03 07:23:40

标签: java data-structures linked-list

在java.util.LinkedList包中,定义为一个静态类的类节点是否必要?目标是什么?

我们可以从page找到源代码。

1 个答案:

答案 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实现的实现细节,并且是在课堂之外没用。因此,使其成为静态嵌套类是最明智的设计选择。