Ответ 1
Из официального глоссария Sun:
deprecation. Относится к классу, интерфейсу, конструктору, методу или полю, который больше не рекомендуется, и может перестать существовать в будущей версии.
Из руководства how-and-when для отказа от руководства:
Возможно, вы слышали термин "самоуничижительный юмор" или юмор, который минимизирует важность оратора. Устаревший класс или метод подобны этому. Это уже не важно. На самом деле так важно, что вы больше не должны его использовать, поскольку он был заменен и может перестать существовать в будущем.
Аннотация @Deprecated
шла дальше и предупреждала об опасности:
Программный элемент, аннотированный
@Deprecated
, является тем, что программистам не рекомендуется использовать, как правило, потому, что это опасно, или потому, что существует лучшая альтернатива.
Ссылки
- java.sun.com Глоссарий
- Руководство по языку/Как и когда отказаться от API-интерфейсов
- Тип аннотации Устаревший API
Обратите внимание, что официальный глоссарий не определяет, что означает "наследие". По всей вероятности, это может быть термин, который использовал Джош Блох без точного определения. Тем не менее, подразумевается, что устаревший класс никогда не должен использоваться в новом коде, и существует более эффективная замена.
Возможно, старый код, использующий устаревший, но не устаревший класс, не требует действий, поскольку на данный момент по крайней мере они не могут перестать существовать в будущей версии.
В отличие от этого, устаревание явно предупреждает о том, что они могут перестать существовать, поэтому необходимо предпринять действия для перехода к замене.
Цитаты из Effective Java 2nd Edition
Для сравнения того, как эти термины используются в контексте, это цитаты из книги, в которой появляется слово "устаревшее":
Пункт 7: Избегайте финализаторов. Единственными методами, которые утверждают, что они гарантируют завершение, являются
System.runFinalizersOnExit
и его злой близнецRuntime.runFinalizersOnExit
. Эти методы смертельно ошибочны и устарели.Пункт 66: Синхронизация доступа к общим изменяемым данным. Библиотеки предоставляют метод
Thread.stop
, но этот метод давно устарел, поскольку он по своей сути небезопасен - его использование может привести к повреждению данных.Пункт 70: Безопасность потока документов. Метод
System.runFinalizersOnExit
является поточно-враждебным и устарел.Пункт 73: Избегайте групп потоков. Они позволяют применять некоторые примитивы
Thread
к кучке потоков одновременно. Некоторые из этих примитивов устарели, а остальные редко используются. [...] группы потоков устарели.
Напротив, это кавычки, где появляется слово "наследие":
Пункт 23: Не используйте необработанные типы в новом коде. Они предназначены для обеспечения совместимости и взаимодействия с устаревшим кодом, который предшествует внедрению дженериков.
Пункт 25: Предпочтительные списки для массивов. Erasure - это то, что позволяет универсальным типам свободно взаимодействовать с устаревшим кодом, который не использует generics.
Пункт 29: Рассмотрите типы гетерогенных контейнеров. Эти обертки полезны для отслеживания того, кто добавляет неверно типизированный элемент в коллекцию в приложении, которое смешивает общий и устаревший код.
Пункт 54: разумно использовать собственные методы. Они предоставляют доступ к библиотекам устаревшего кода, который, в свою очередь, может обеспечить доступ к устаревшим данным. [...] Также законно использовать собственные методы для доступа к устаревшему коду. [...] Если вы должны использовать собственные методы для доступа к низкоуровневым ресурсам или устаревшим библиотекам, используйте как можно меньше собственного кода и тщательно протестируйте его.
Пункт 69: Предпочитают concurrency утилиты ждать и уведомлять. Хотя вы всегда должны использовать утилиты concurrency, предпочитая
wait
иnotify
, возможно, вам придется поддерживать устаревшие код, который используетwait
иnotify
.
Эти цитаты не были тщательно отобраны: это ВСЕ экземпляры, в которых в книге появляются слова "устаревшие" и "устаревшие". Сообщение Блоха ясно здесь:
- Устаревшие методы, например.
Thread.stop
, являются опасными и никогда не должны использоваться вообще. - С другой стороны, например,
wait/notify
может оставаться в устаревшем коде, но не должен использоваться в новом коде.
Мое собственное субъективное мнение
Моя интерпретация заключается в том, что обесценивание чего-то признает, что это ошибка, и с самого начала никогда не было хорошо. С другой стороны, классификация того, что что-то является наследием, допускает, что в прошлом это было достаточно хорошо, но оно служило своей цели и уже недостаточно хорошо для настоящего и будущего.