Я читал Эффективное Java 2 - пункт 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");
}
}
}
Выход
Я внутренний Я внутренний
Таким образом, они сделали ту же работу.
Интересно, почему в этом примере используется нестатический класс?