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