为什么要使用 private static inner class?打败静态内部class的目的?

Why would you use private static inner class? Defeats the purpose of static inner class?

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

但是 none 篇文章回答了这个问题:

为什么要有一个 private static inner class,如果有一个 static inner class 的目的是为了让你可以在没有外层 class?

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

对我来说,内部 classes 的 private 和 static 似乎是矛盾的,如果你想既是 private 又是 static 那很奇怪。那么有人可以解释一下我遗漏了什么吗?

谢谢!

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

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

内部使用

术语旁注:Java 中没有 "static inner class"。如果是static,则不是内部class,而是静态嵌套class。 the tutorial.

中的更多内容