EOLなバージョン使うのやめようぜ...
久しぶりぶりか、もしかしたら初めてかもしれないIteratorを実装してみたんですよ。
コミットしたら何故か他の人のEclipseでは赤くなるんですよね。
Java8Iterator.java
import java.util.Iterator;
public class Java8Iterator implements Iterator<Integer> {
@Override
public boolean hasNext() {
// TODO Auto-generated method stub
return false;
}
@Override
public Integer next() {
// TODO Auto-generated method stub
return null;
}
}
Java7Iterator.java
import java.util.Iterator;
public class Java7Iterator implements Iterator<Integer> {
@Override
public boolean hasNext() {
// TODO Auto-generated method stub
return false;
}
@Override
public Integer next() {
// TODO Auto-generated method stub
return null;
}
@Override
public void remove() {
// TODO Auto-generated method stub
}
}
違いがわかるだろうか? Java7Iteratorではremoveメソッドあり、Java8Iteratorではremoveメソッドが実装されていないのだ。実装されていなくても問題の無い環境があったり、実装されていないとコンパイルエラーな環境もある。
プロジェクトのJava Build Pathを見ると「JRE System Library [JavaSE-1.6]」だ。Java7ですらなかったのか!
プロジェクトの設定がJava 1.6でもjre1.8.0を使っていると、Eclipseの「Add unimplemented methods」で生成されるコードにはremoveメソッドが含まれない。
ちゃんとjre1.6を使うようにCompatible JREを設定すると、生成されるコードにはremoveメソッドが含まれるようになった。
JDK8のsrc.zipを確認すると、Iteratorインターフェースにはデフォルト実装が記述されてますね。デフォルト実装があると未実装メソッドとしては扱われないと。
そういうわけでEOLなバージョンのJavaを葬るか、しっかりCompatible JREを設定するかしましょう。