Kompilierungsfehler mit generischen und ternären Operatoren in JDK 7
Beim Schreiben von Java-Code ist ein Kompilierungsfehler aufgetreten, der auf den folgenden Testfall zurückzuführen ist:
import java.util.Collections;
import java.util.List;
public class TernaryFailure {
public static List<String> thisWorks() {
return Collections.emptyList();
}
public static List<String> thisFailsToCompile() {
return true ? Collections.emptyList() : Collections.emptyList();
}
}
Der obige Code kann nicht kompiliert werdenjavac
mit JDK 1.7.0_45:
$ javac TernaryFailure.java
TernaryFailure.java:10: error: incompatible types
return true ? Collections.emptyList() : Collections.emptyList();
^
required: List<String>
found: List<Object>
1 error
Es wird jedoch mit JDK 1.8.0_05 fehlerfrei kompiliert.
Ist das ein Fehler in der Java 7-Implementierung? Oder wurde die Java-Sprachspezifikation in Java 8 verbessert, um dies zu ermöglichen - und wenn ja, wie war die Änderung?