Следующий код:
void someMethod(Object value)
{
String suffix = getSuffix();
if (suffix != null)
value += suffix;
[...]
}
компилируется без ошибок в JDK 8 (с использованием -source 1.6), но завершается с ошибкой в JDK 6 с сообщением об ошибке:
Operator '+' cannot be applied to java.lang.Object and java.lang.String
Хотя я понимаю, в чем заключается ошибка, почему она компилируется с JDK 8? Это где-нибудь задокументировано?
value = value + suffix
полностью допустимо, независимо от типа значения. Так что, мне кажется,value += suffix
это тоже должно быть законно.Ответы:
JLS 15.26.2. Сложные Операторы Назначения заявляют :
Это предложение то же самое от Java 6 до Java 14 , и, вероятно, никогда не менялось с самого начала Java.
Так
value += suffix
же, какvalue = (Object) (value + suffix)
Компилятор Java 6 не должен был скомпилировать этот оператор.
источник
value = (Object) (value + suffix)
должен компилироваться.