为什么要使用私有静态内部类?打败静态内部阶级的目的?

时间:2018-02-04 11:09:14

标签: java static private inner-classes

我已经阅读了所有关于静态内部课程的文章,以及我所理解的内容:

  • 可以在不事先创建外部类的情况下创建静态内部类的实例。这是静态和非静态内部类之间的一个主要区别。

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

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

例如,Java的LinkedList实现包含private static class Node<E>。如果我们尝试实例化LinkedList<String>.Node<String>,它就会失败,因为它是私有的。而且我也不知道你为什么要创建一个没有LinkedList的节点,因为你只使用LinkedList的add()接口。那么,这只是一个非静态的内部阶级吗?

对我来说,对于内部类来说,私有和静态似乎是矛盾的,如果你想成为私人和静态的,那就太奇怪了。那么有人可以解释一下我错过了什么吗?

谢谢!

1 个答案:

答案 0 :(得分:4)

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

LinkedList就是一个很好的例子,说明你为什么要拥有static嵌套类:LinkedList需要LinkedList.Node的多个实例,而且它不会#39} ; t需要这些实例引用列表本身。那将是毫无意义的开销。所以Node类是static,以便不对列表进行后向引用。它也是private,因为它仅供LinkedList内部使用。

关于术语的旁注:没有&#34;静态内部类&#34;在Java中。如果它是static,它不是内部类,那么它就是一个静态嵌套类。更多信息the tutorial