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仕様書にはこのクラスの説明はない。まあ、プライベートクラスだし、 一般コーダーは気にしなくていい部分なんだから、当たり前か…。