ArrayListを作ってそこでiterator()メソッドを使って反復子のインスタンスを得た場合、 何のクラスが使われているのか気になったので調べてみた。
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
Iterator<String> it = list.iterator();
System.out.println(it);
System.out.println(it.getClass().getCanonicalName());
System.out.println(it.getClass().getSimpleName());
System.out.println(it.getClass().getName());
}
結果はこう。
java.util.AbstractList$Itr@10b30a7 java.util.AbstractList.Itr Itr java.util.AbstractList$Itr
どうやらAbstractListクラス(ArrayListの親クラスだな)の中に「Itr」ってクラスがあって、 それが使われているらしい。 AbstractListの中を覗くと…確かにそんなクラスがあるねえ。 プライベートクラスになっていて、AbstractListが持っているフィールドを参照しながら動作するようだ。
ただ、API仕様書にはこのクラスの説明はない。まあ、プライベートクラスだし、 一般コーダーは気にしなくていい部分なんだから、当たり前か…。