Poniższy kod:
void someMethod(Object value)
{
String suffix = getSuffix();
if (suffix != null)
value += suffix;
[...]
}
kompiluje się bez błędów w JDK 8 (przy użyciu -source 1.6), ale kończy się niepowodzeniem w JDK 6 z komunikatem o błędzie:
Operator '+' cannot be applied to java.lang.Object and java.lang.String
Rozumiem, o co chodzi w tym błędzie, ale dlaczego kompiluje się z JDK 8? Czy jest to gdziekolwiek udokumentowane?
value = value + suffix
jest całkowicie legalne, niezależnie od rodzaju wartości. Wydaje mi się, żevalue += suffix
powinno to być również legalne.Odpowiedzi:
JLS 15.26.2. Operatorzy przypisań złożonych :
To zdanie jest takie samo od Javy 6 do Javy 14 i prawdopodobnie nigdy się nie zmieniło od początku Javy.
Więc
value += suffix
to samo covalue = (Object) (value + suffix)
Kompilator Java 6 nie powinien był skompilować tej instrukcji.
źródło
value = (Object) (value + suffix)
należy skompilować równoważne wyrażenie .