Java中的静态嵌套类,为什么?

问题:

我正在查看LinkedList的Java代码,并注意到它使用静态嵌套类Entry

public class LinkedList<E> ... {
...

 private static class Entry<E> { ... }

}

使用静态嵌套类的原因是什么,而不是正常的内部类?
我可以想到的唯一原因是,Entry无法访问实例变量,所以从OOP的角度来看,它具有更好的封装。
但我认为可能还有其他原因,也许是表现。可能是什么
注意。我希望我的术语正确,我会把它称为静态内部类,但我认为这是错误的:http://java.sun.com/docs/books/tutorial/java/javaOO/nested.html

回答:

你链接的Sun页面之间有两个关键的区别:

嵌套类是其封闭类的成员。非静态嵌套类(内部类)可以访问封闭类的其他成员,即使它们被声明为私有的。静态嵌套类无法访问封闭类的其他成员。

注意:静态嵌套类与其外层类(和其他类)的实例成员一样,与任何其他顶级类一样。 实际上,静态嵌套类是行为上的顶级类,已经嵌套在另一个顶级类中以便于打包。

LinkedList.Entry不需要LinkedList.Entry作为LinkedList only使用的顶级类(还有一些其他接口也有名为Entry的静态嵌套类,例如Map.Entry – 同样的概念)。由于它不需要访问LinkedList的成员,所以它是静态的 – 这是一个更清洁的方法。
作为Jon Skeet points out,我认为如果使用嵌套类是静态的,然后根据使用情况确定是否真的需要非静态,这是一个更好的主意。

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: Static nested class in Java, why?

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

13 − = 10