我已经阅读了所有可以在静态内部类上找到的文章,并且据我了解:


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


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

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

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

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

谢谢!

最佳答案

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

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



关于术语的旁注:Java中没有“静态内部类”。如果它是static,则不是内部类,而是静态嵌套类。 the tutorial中的更多内容。

07-26 03:15