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

Mus*_*Map 5 java static private inner-classes

我已经阅读了所有我能找到的关于静态内部类的文章,据我了解:

  • 可以创建静态内部类的实例,而无需事先创建外部类。这是静态内部类和非静态内部类之间的主要区别之一。

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

如果拥有静态内部类的目的是为了可以在没有外部类的情况下创建它,为什么还要拥有私有静态内部类呢

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

对我来说,内部类的私有和静态似乎是矛盾的,如果你想同时私有和静态那就很奇怪了。那么有人可以解释一下我缺少什么吗?

谢谢!

T.J*_*der 13

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

LinkedList是一个很好的例子,说明了为什么要使用static嵌套类:LinkedList需要 的多个实例LinkedList.Node,并且不需要这些实例来引用列表本身。那将是毫无意义的开销。因此,该类Nodestatic为了不让这些反向引用列表。这也是private因为它仅供 内部使用LinkedList


关于术语的附注:Java 中没有“静态内部类”。如果是static,则它不是内部类,而是静态嵌套类。更多内容请参见教程