有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为什么要使用私有静态内部类?违背了静态内部类的目的?

我已经阅读了所有关于静态内部类的文章,从我的理解来看:

  • 静态内部类的实例可以在不创建外部类的情况下创建。这是静态和非静态内部类之间的一个主要区别

但没有一篇文章回答这个问题:

如果创建静态内部类的目的是为了在没有外部类的情况下创建它,那么为什么要创建一个private静态内部类

例如,Java的LinkedList实现包含private static class Node<E>。如果我们尝试实例化LinkedList<String>.Node<String>,它将无法工作,因为它是私有的。我也不明白为什么要创建没有LinkedList的节点,因为您只使用LinkedList的add()接口。这难道不能是一个非静态的内部类吗

对我来说,内部类的私有和静态似乎是矛盾的,如果你想既私有又静态,这很奇怪。有人能解释一下我遗漏了什么吗

谢谢


共 (1) 个答案

  1. # 1 楼答案

    请记住,非静态嵌套类(“内部类”)实例具有对其包含实例的引用。那不是免费的。如果你不需要它,你就不应该拥有它

    LinkedList是一个很好的例子,确切地说明了为什么会有一个static嵌套类:LinkedList需要多个LinkedList.Node实例,而不需要这些实例来引用列表本身。这将是毫无意义的开销。因此Node类是static,以避免那些对列表的反向引用。它也是private,因为它只供LinkedList内部使用


    术语旁注:Java中没有“静态内部类”。如果它是static,那么它不是一个内部类,而是一个静态嵌套类。更多信息请参见the tutorial