Der folgende Code:
void someMethod(Object value)
{
String suffix = getSuffix();
if (suffix != null)
value += suffix;
[...]
}
Kompiliert fehlerfrei in JDK 8 (mit -source 1.6), schlägt jedoch in JDK 6 mit der Fehlermeldung fehl:
Operator '+' cannot be applied to java.lang.Object and java.lang.String
Obwohl ich verstehe, worum es bei dem Fehler geht, warum wird dies mit JDK 8 kompiliert? Ist das irgendwo dokumentiert?
value = value + suffix
ist unabhängig von der Art des Werts völlig legal. Es scheint mirvalue += suffix
also auch legal zu sein.Antworten:
JLS 15.26.2. Compound Assignment Operators gibt an:
Dieser Satz ist von Java 6 bis Java 14 derselbe und hat sich seit Beginn von Java wahrscheinlich nie geändert.
So
value += suffix
ist das gleiche wievalue = (Object) (value + suffix)
Der Java 6-Compiler sollte diese Anweisung nicht fehlschlagen können.
quelle
value = (Object) (value + suffix)
kompiliert werden sollte.