Следующий код:
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? Это где-нибудь задокументировано?
Я думаю, значение не обязательно должно быть String. Если значение является целым числом, то нет смысла добавлять к нему строку. Возможно, вы можете попытаться преобразовать значение в строку
—
fedoraHacker
@fedoraHacker Выражение
—
Гродригес
value = value + suffix
полностью допустимо, независимо от типа значения. Так что, мне кажется, value += suffix
это тоже должно быть законно.
вау, я понятия не имел Я думал, что вся суть разных объектов заключается в том, чтобы определить правила для того, что данные могут и не могут делать. Весь смысл наличия разных типов данных и объектов состоит в том, чтобы разделить ответственность, чтобы убедиться, что типы делают одно, а делают это хорошо. Я просто сбит с толку, что вы можете так смешивать типы данных. Что ж, ты учишься чему-то каждый день :) и значение = значение + суффикс - это то же самое, что значение + = суффикс, так что я вообще не оспариваю синтаксис
—
fedoraHacker
Да, но тип String несколько особенный. Оператор + здесь является «оператором конкатенации строк»; если только один из операндов является строкой, другой преобразуется в строку перед вычислением выражения. Смотрите этот раздел JLS .
—
Гродригес
Ах, я вижу, не знал, что строка преобразует это так. Спасибо, что нашли время ответить даже после того, как на вопрос был дан ответ!
—
fedoraHacker