読者です 読者をやめる 読者になる 読者になる

呼ばれることを前提にしたクラス設計

JavaにはEnumerationとかIterationとか、反復処理のためのクラスがあるけど、
これらのクラスはまず要素があるか、ないかを確認してから次の要素をとるように
期待して実装されているんですね。
具体的に書くとEnumeration#nextElements()とか、Iteration#next()しか呼ばないのは
なしって事らしい。

具体的に書くとおいら的に下記のコードはOKだと思ってた。

Enumeration e = ...;
while((Object obj = e.nextElement()) != null){
   ...
}

でも、

Enumeration<JarEntry> e = new JarFile(...).entries();
while(e.hasMoreElement()){
   JarEntry obj = e.nextElement();
   ...
}

と書かないと、Jarの中身が取れなくてNullPointerExceptionが投げられるんです。
実装によってはEnumeration#hasMoreElement()が呼ばれることでクラスの中の状態を切り替えるものもいるんだなー。と思った次第です。こんなの、ソース見ないとわからん。