Наступний код:
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. Якщо значення є цілим числом, то я не маю сенсу додавати до нього рядок. Maybye ви можете спробувати надати значення рядку
—
fedoraHacker
@fedoraHacker Вираз
—
Grodriguez
value = value + suffix
є повністю законним незалежно від типу значення. Тож, мені здається, value += suffix
теж має бути законно.
уау, я поняття не мав. Я думав, що вся суть різних об’єктів полягає у визначенні правил того, що дані можуть робити, а що не можна. Весь сенс наявності різних типів даних та об'єктів полягає у роздільній відповідальності за переконання, що типи виконують одне, але це добре. Мене просто бентежить, що ви можете змішувати подібні типи даних. Що ж, ви дізнаєтесь щось щоденне :), а значення = значення + суфікс - це еквівалент, як значення + = суфікс, тому я взагалі не
—
оспорюю
Так, але тип String є дещо особливим. Оператор + тут - "оператор конкатенації рядків"; якщо лише один з операндів є рядком, інший перетворюється в рядок перед тим, як вираження буде оцінено. Дивіться цей розділ JLS .
—
Grodriguez
Ну я бачу, не знав, рядок перетворив це так. Дякуємо, що знайшли час для відповіді навіть після відповіді на запитання!
—
fedoraHacker