Устаревшие против Denigrated в JavaDoc?

11

В JavaDoc для X509Certificate getSubjectDN()этого говорится:

Денегратировано , заменено getSubjectX500Principal ().

Я привык видеть устаревшие методы for, которые больше не должны использоваться, но не Denigrated. Я нашел сообщение об ошибке в этом конкретном случае, когда оно было закрыто с комментарием:

Это не ошибка «Устаревший» предназначен для использования только в серьезных случаях.

Когда мы используем метод, который устарел , обычно предлагается прекратить использование метода.

Итак, что такое предлагаемое действие, когда метод помечен как Denigrated ?

Джейкоб Шон
источник
2
Ух ты. Я прочитал ответы, и, хотя я уверен, что они технически правильны, «Клеветник» - ужасное слово для использования. Они должны были просто использовать «Обескураженный». Не нужно плевать на код; предупреждение будет достаточно.
Эрик Кинг,
@ Эрик Кинг, я чувствовал то же самое. Я больше думал о том, что, если это обескураживает, просто осуждайте это.
Джейкоб Шон

Ответы:

9

Мерриам-Вебстер определение клеветы предполагает:

1: атаковать репутацию: порочить <очернить своих оппонентов>
2: отрицать важность или обоснованность: умалять <унижать их достижения>

Основываясь на том, что написано в другой связанной ошибке, defame / belittle соответствует цели формулировки, используемой в javadocs - ID ошибки: 4959744 Denigrate X509Certificate.getSubjectDN () & co :

Методы getSubjectDN () и getIssuerDN () в X509Certificate и getIssuerDN () в X509CRL являются проблематичными . Они возвращают неопределенный класс, реализующий интерфейс java.security.Principal, который имеет очень свободную спецификацию.

Поскольку в методах getSubjectDN () и getIssuerDN () нет дополнительной спецификации, реализациям разрешено возвращать произвольный класс, специфичный для реализации. Опыт реального мира показал, что это так, что приводит к непереносимости или ненадежности кода. По причинам совместимости, спецификации для этих методов не могут быть изменены, и они должны рассматриваться как не подлежащие восстановлению.

В JDK 1.4 были добавлены методы замены getSubjectX500Principal () & co, которые возвращают экземпляр четко определенного класса X500Principal. Реализации этих методов были разработаны, чтобы избежать всех проблем такого рода. Однако новые методы страдают от недодержки, и программисты продолжают использовать знакомые и более интуитивно понятные методы getSubjectDN () & co.

Чтобы изменить это, старые методы getSubjectDN () и getIssuerDN () должны быть объявлены устаревшими. Это гарантирует, что разработчики, использующие эти методы, получат предупреждение о времени компиляции ....

ОЦЕНКА

... Устаревание в этом случае считалось неуместным. Вместо этого, предупреждающие комментарии были добавлены в JavaDoc .


Тот факт, что чтение идентификатора ошибки 5008142 оставило вас в замешательстве по поводу этого «порочащего» материала, больше похоже на ошибку разработчика, который имел дело с этим.

Им следовало бы найти ошибку 4959744 и сослаться на нее в своих оценках вместо смутного утверждения «предназначено для использования только в серьезных случаях». Вероятно, они могли бы даже закрыться как дубликаты, с обоснованием типа «Устаревание было рассмотрено, оценено и отклонено в пользу клеветы за идентификатор ошибки 4959744» .

В самом крайнем они могут относиться Bug ID 4959744 (возможно , вместе с 4638294 ) в теме Отчеты поле (под названием See Также в старом bugs.sun.com IIRC) их отслеживания ошибок. То, что это не было сделано, заставляет заподозрить, что они вообще не искали связанных вопросов.

комар
источник
1
Сложнее всего было @FrustratedWithFormsDesigner выяснить, как ввести слово «клевета» на странице поиска оракула, чтобы результаты фильтровались на «bugs.sun.com». Остальное было легко, я просто проверил несколько результатов поиска, которые появились. «Denigrate» - довольно хорошее слово для поиска :)
gnat
1
Видите, я использовал Google, чтобы найти тот первый, но он не дал мне другие. Я, наверное, должен был выглядеть сложнее. Спасибо
Джейкоб Шоен
@jschoen Я думаю, что это не так много по твоей вине; Я расширил ответ на этот вопрос
комнат
4

После еще нескольких копаний я смог найти пост в блоге под названием « Устаревание» в JDK . В основном говорится, что вещи, помеченные как устаревшие , считаются вредными для использования, а некоторые вещи просто не одобряются.

Общая политика для нескольких выпусков функций заключается в том, что основные компоненты JDK помечаются как устаревшие, только если они активно вредны. Если использование класса или метода просто опрометчиво, этого обычно недостаточно, чтобы заработать устаревшую оценку.

Он упомянул, что в настоящее время существует способ пометить элемент как нежелательный для использования, но они могут в конечном итоге добавить способ сделать это.

В какой-то момент этот вид совета может быть оформлен с помощью менее опасного, чем устаревшая, средства «клеветы», основанного на комбинации тегов javadoc и аннотаций, позволяющих проводить программные проверки на использование этих менее вредных элементов API.

В то время как я не могу найти что-то еще конкретно о решении использовать термин Denigrated, это кажется довольно близким. И исходя из этого кажется, что действие, которое должен предпринять разработчик, такое же, как и Устаревшее , не используйте метод.

Джейкоб Шон
источник