【发布时间】:2013-07-05 01:57:19
【问题描述】:
我正在阅读 Effective Java 2 - Item 22,它在标题中写道:
“静态成员类优于非静态”
但在本章的结尾
集合接口的实现,例如Set和List, 通常使用非静态成员类来实现它们的迭代器:
// Typical use of a nonstatic member class
public class MySet<E> extends AbstractSet<E> {
... // Bulk of the class omitted
public Iterator<E> iterator() {
return new MyIterator();
}
private class MyIterator implements Iterator<E> {
...
}
}
我做了一个测试程序,看看它们和这里有什么区别。
public class JavaApplication7 {
public static void main(String[] args) {
// TODO code application logic here
JavaApplication7 t = new JavaApplication7();
Inner nonStaticObject = t.getAClass();
Sinner staticObject = new JavaApplication7.Sinner();
nonStaticObject.testIt();
staticObject.testIt();
}
public Inner getAClass(){
return new Inner();
}
static class Sinner{
public void testIt(){
System.out.println("I am inner");
}
}
class Inner{
public void testIt(){
System.out.println("I am inner");
}
}
}
输出是
我是内在的 我很内向
所以,他们做了同样的工作。
我想知道为什么在这个例子中使用非静态类?
【问题讨论】:
标签: java oop inner-classes nested-class