为什么要使用 private static inner class?打败静态内部class的目的?
Why would you use private static inner class? Defeats the purpose of static inner class?
我已经阅读了所有关于静态内部 classes 的文章,据我了解:
- 可以创建静态内部 class 的实例,而无需事先创建外部 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.
中的更多内容
我已经阅读了所有关于静态内部 classes 的文章,据我了解:
- 可以创建静态内部 class 的实例,而无需事先创建外部 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.