以前一直以为静态内部类没用,现在发现在特定条件下使用静态内部类会更加方便.
静态内部类的使用最佳的示例莫过于jdk里面的LinkedList类了.
查看LinkedList的源码,LinkedList的节点用一个静态内部类Node表示,代码如下
private static class Node<E> { E item; Node<E> next; Node<E> prev; Node(Node<E> prev, E element, Node<E> next) { this.item = element; this.next = next; this.prev = prev; } }
为什么节点要用静态内部类?
1.首先,用内部类是因为内部类与所在外部类有一定的关系,往往只有该外部类调用此内部类。所以没有必要专门用一个Java文件存放这个类。
2.随着类的加载而产生
3.由于LinkedList实现了Serializable接口,而内部类使用的是编译器产生的合成域来保存指向外围实例的引用,以及保存来自外围作用域的局部变量的值.这些域如何对应到类中是没有明确规定的,因此内部类的内部实现是定义不清楚的.[1]
[1] Effective Java 2nd Edition
时间: 2024-11-05 02:24:27