Из официального глоссария Sun:
устаревание: относится к классу, интерфейсу, конструктору, методу или полю, которые больше не рекомендуются и могут перестать существовать в будущей версии.
Из руководства, как и когда отказаться от рекомендаций:
Возможно, вы слышали термин «самоуничижительный юмор» или «юмор», которые принижают важность говорящего. Устаревший класс или метод похож на это. Это уже не важно. Фактически, это настолько неважно, что вы больше не должны его использовать, поскольку он был заменен и может прекратить свое существование в будущем.
Аннотация @Deprecated
пошла еще дальше и предупреждает об опасности:
Программный элемент, помеченный @Deprecated
, - это элемент, который программистам не рекомендуется использовать, обычно потому, что он опасен или потому что существует лучшая альтернатива.
использованная литература
Обратите внимание, что официальный глоссарий не определяет, что означает «наследие». По всей вероятности, это может быть термин, который использовал Джош Блох без точного определения. Однако всегда подразумевается, что унаследованный класс никогда не должен использоваться в новом коде и существует лучшая замена.
Возможно, старый код, использующий устаревший, но не устаревший класс, не требует никаких действий, поскольку, по крайней мере, на данный момент, они не рискуют перестать существовать в будущей версии.
Напротив, устаревание явно предупреждает, что они могут перестать существовать, поэтому следует принять меры для перехода на замену.
Цитаты из Effective Java 2nd Edition
Для сравнения того, как эти термины используются в контексте, это цитаты из книги, где встречается слово не рекомендуется:
Правило 7. Избегайте финализаторов. Единственные методы, которые заявляют, что гарантируют завершение, - это System.runFinalizersOnExit
и его злой двойник Runtime.runFinalizersOnExit
. Эти методы фатально ошибочны и устарели.
Правило 66: Синхронизация доступа к совместно используемым изменяемым данным. Библиотеки предоставляют метод Thread.stop
, но этот метод давно устарел, поскольку он по своей сути небезопасен - его использование может привести к получению данных коррупция.
Правило 70: Безопасность потоков документов: метод System.runFinalizersOnExit
является враждебным к потокам и устарел.
Правило 73: Избегайте групп потоков: они позволяют применять определенные Thread
примитивы к группе потоков одновременно. Некоторые из этих примитивов устарели, а остальные используются нечасто. [...] группы потоков устарели.
Напротив, в этих кавычках встречается слово устаревшее:
Правило 23. Не используйте необработанные типы в новом коде: они предоставляются для совместимости и взаимодействия с устаревшим кодом, предшествующим введению универсальных типов.
Правило 25: Предпочитайте списки массивам. Стирание - это то, что позволяет универсальным типам свободно взаимодействовать с унаследованным кодом, который не использует универсальные типы.
Правило 29: учитывайте типизированные гетерогенные контейнеры. Эти оболочки полезны для отслеживания того, кто добавляет неправильно типизированный элемент в коллекцию в приложении, которое смешивает общий и устаревший код.
Правило 54: разумно используйте собственные методы: они предоставляют доступ к библиотекам устаревшего кода, который, в свою очередь, может предоставить доступ к устаревшим данным. [...] Также законно использовать собственные методы для доступа к унаследованному коду. [...] Если вам необходимо использовать собственные методы для доступа к ресурсам низкого уровня или унаследованным библиотекам, используйте как можно меньше машинного кода и тщательно его протестируйте.
Правило 69: Предпочитайте утилиты параллелизма для ожидания и уведомления. Хотя вы всегда должны использовать утилиты параллелизма вместо wait
и notify
, вам, возможно, придется поддерживать устаревший код, который использует wait
и notify
.
Эти цитаты не были тщательно отобраны: это ВСЕ случаи, когда в книге встречаются слова устаревшие и устаревшие. Посыл Блоха здесь ясен:
- Устаревшие методы, например
Thread.stop
, опасны и не должны никогда использоваться.
- С другой стороны, например,
wait/notify
может оставаться в устаревшем коде, но не должен использоваться в новом коде.
Мое собственное субъективное мнение
Моя интерпретация такова, что осуждение чего-либо - это признание того, что это ошибка, и что это никогда не было хорошо с самого начала. С другой стороны, определение того, что что-то является наследием, означает признание того, что оно было достаточно хорошим в прошлом, но выполнило свою задачу и больше не подходит для настоящего и будущего.
person
polygenelubricants
schedule
20.05.2010