Hören wir auf, die EOL-Version zu verwenden ...
Es ist schon eine Weile her, dass ich Iterator implementiert habe, was vielleicht das erste Mal ist. Wenn ich mich verpflichte, wird es in der Eclipse anderer Leute aus irgendeinem Grund rot.
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
}
}
Kannst du den Unterschied sehen? Java7Iterator verfügt über eine Methode zum Entfernen, und Java8Iterator verfügt nicht über eine Methode zum Entfernen. Es gibt Umgebungen, in denen es kein Problem gibt, auch wenn es nicht implementiert ist, und es gibt Umgebungen, in denen Kompilierungsfehler auftreten, wenn es nicht implementiert ist.
Der Java-Erstellungspfad des Projekts lautet "JRE-Systembibliothek [Java SE-1.6]". War es nicht einmal Java7?
Wenn die Projekteinstellungen Java 1.6 sind, aber jre 1.8.0 verwendet wird, enthält der von Eclipse generierte Code "Add nicht implementierte Methoden" nicht die Methode remove. Wenn ich die kompatible JRE für die ordnungsgemäße Verwendung von jre 1.6 konfiguriert habe, enthält der generierte Code jetzt eine Entfernungsmethode.
Wenn Sie src.zip von JDK8 überprüfen, wird die Standardimplementierung in der Iterator-Schnittstelle beschrieben. Wenn es eine Standardimplementierung gibt, wird diese nicht als nicht implementierte Methode behandelt.
Aus diesem Grund sollten Sie entweder eine EOL-Version von Java begraben oder eine eng kompatible JRE einrichten.
Recommended Posts