java为什么要使用私有静态内部类?违背了静态内部类的目的?
我已经阅读了所有关于静态内部类的文章,从我的理解来看:
- 静态内部类的实例可以在不创建外部类的情况下创建。这是静态和非静态内部类之间的一个主要区别李>
但没有一篇文章回答这个问题:
如果创建静态内部类的目的是为了在没有外部类的情况下创建它,那么为什么要创建一个private静态内部类
例如,Java的LinkedList实现包含private static class Node<E>
。如果我们尝试实例化LinkedList<String>.Node<String>
,它将无法工作,因为它是私有的。我也不明白为什么要创建没有LinkedList的节点,因为您只使用LinkedList的add()接口。这难道不能是一个非静态的内部类吗
对我来说,内部类的私有和静态似乎是矛盾的,如果你想既私有又静态,这很奇怪。有人能解释一下我遗漏了什么吗
谢谢
# 1 楼答案
请记住,非静态嵌套类(“内部类”)实例具有对其包含实例的引用。那不是免费的。如果你不需要它,你就不应该拥有它
LinkedList
是一个很好的例子,确切地说明了为什么会有一个static
嵌套类:LinkedList
需要多个LinkedList.Node
实例,而不需要这些实例来引用列表本身。这将是毫无意义的开销。因此Node
类是static
,以避免那些对列表的反向引用。它也是private
,因为它只供LinkedList
内部使用术语旁注:Java中没有“静态内部类”。如果它是
static
,那么它不是一个内部类,而是一个静态嵌套类。更多信息请参见the tutorial