Какие проекты Java явно сделаны для поддержки назад совместимости? [закрытый]

Причина, по которой компилятор жалуется, связана с этим ключевым моментом из раздела 14.21 спецификации языка Java , где обсуждаются недостижимые операторы:

За исключением специального режима из операторов while, do и for, выражение условия которых имеет постоянное значение true, значения выражений не учитываются при анализе потока.

Обратите внимание, что if не не одно из утверждений, которое имеет специальную обработку true постоянных условий. Причина, по которой он исключен из этой специальной обработки, заключается в том, что он позволяет использовать if в качестве формы условной компиляции, как объяснил Дейв Ньютон в своем ответе.

6
задан Community 23 May 2017 в 12:04
поделиться

3 ответа

Поскольку у этого вопроса нет единственного правильного ответа, я не конечно, если это ' Будет лучше, чем ваш другой вопрос.

Я могу вспомнить три функции (в дополнение к общему стиранию, о котором вы уже упоминали), которые привели к компромиссу во имя обратной совместимости, - это новый синтаксис цикла, varargs и автобокс .

Новый синтаксис цикла for, вероятно, должен был читать для (элемента в списке) , но для этого потребовалось бы преобразовать в в зарезервированное слово. Это вызвало бы множество проблем обратной совместимости, не в последнюю очередь из-за того, что System.in пришлось бы переименовать.

varargs и autoboxing добавили возможности двусмысленности. Например, если вы передаете массив объектов методу, принимающему Object ... означает ли это, что массив должен передаваться как массив vararg или как элемент массива vararg? Это становится еще более сложным, если есть перегрузки. Автобокс имеет аналогичные проблемы неоднозначности с перегрузкой. Решение обеих этих проблем состояло в том, чтобы сделать правилом, что при разрешении вызовов методов они сначала разрешаются с правилами до 1.5 (то есть: без автобокса, и Object ... обрабатывается как ] Объект [] ). Только если вызов метода не может быть разрешен с помощью правил до версии 1.5, рассматриваются новые правила версии 1.5.

и Объект ... рассматривается как Объект [] ). Только если вызов метода не может быть разрешен с помощью правил до версии 1.5, рассматриваются новые правила версии 1.5.

и Объект ... рассматривается как Объект [] ). Только если вызов метода не может быть разрешен с помощью правил до версии 1.5, рассматриваются новые правила версии 1.5.

3
ответ дан 10 December 2019 в 02:52
поделиться

В стандартной библиотеке

  • есть множество примеров. Java.awt.Color имеет одинаковые константы с именами в верхнем и нижнем регистре
  • Все устаревшие методы в java.util.Date учитывая введение java.util.Calendar - какой беспорядок !!
  • java.util.Enumeration все еще используется там, где java.util.Iterator может заменить его
  • Классы в Swing, которые принимают векторы в качестве аргументов, но могли иметь добавлена ​​поддержка java.util.Collection
3
ответ дан 10 December 2019 в 02:52
поделиться

Еще один - это все классы и методы, которые уже устарели для нескольких версий, но просто не исчезнут. Наиболее примечательны различные методы Thread, которые устарели.

2
ответ дан 10 December 2019 в 02:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: