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?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage