Einfluss des Java-Ternäroperators auf die Inferenz generischer Typen
public List<String> foo1() {
List<String> retval = bar();
if (retval == null)
return Collections.emptyList();
else
return retval;
}
public List<String> foo2() {
List<String> retval = bar();
return retval == null ? Collections.emptyList() : retval;
}
Warum tutfoo1()
kompiliert gut währendfoo2()
hat einen fehler? (präziser sein"Typenkonflikt: Konvertierung von Liste <Erfassung Nr. 1 von? Erweitert Objekt> in Liste <Zeichenfolge> nicht möglich.")
Ich hätte gedacht, dass beide Funktionen zum gleichen Bytecode kompilieren würden, also sollte ein kluger Compiler den korrekten Typ für schließenemptyList()
...