Как объявить или пометить метод Java как устаревший?


284

Я хотел бы сделать один из моих методов "устаревшим" = больше не используется.

Но все же я хотел бы иметь это в своем API. Я просто хочу показать «предупреждение» любому, кто использует этот метод.

Как я могу этого достичь?


10
@Deprecrated не вариант для вас?
templatetypedef

18
Это так, но я не знал об этом ... вот почему я задаю вопрос :)
Павел Яничек


4
комментарии не место для ответов!
mattumotu

Ответы:


578

Используйте @Deprecatedпо методу. Не забудьте про уточнение поля Javadoc:

/**
 * Does some thing in old style.
 *
 * @deprecated use {@link #new()} instead.  
 */
@Deprecated
public void old() {
// ...
}

2
Как вы связываете внешнюю библиотеку? Например: com.hello.api.PublicController # new
Файзан Кази

@LinuxLars полностью согласен! Java 9 добавила пару атрибутов, чтобы начать воспринимать устаревание всерьез, но добавление еще одного атрибута reasonсо значением по умолчанию ""не могло повредить
спрашивает

3
Я хотел бы, чтобы @deprecatedсообщение в комментарии могло быть добавлено @Deprecated(одно место, чтобы исправить их все) ...
У. Уиндл

88

Используйте как @Deprecatedаннотацию, так и @deprecatedтег JavaDoc.

@deprecatedJavaDoc тег используется для документирования.

@DeprecatedАннотации инструктирует компилятор , что метод является устаревшим. Вот что говорится в документе Sun / Oracles на эту тему:

Использование @Deprecatedаннотации для устаревания класса, метода или поля гарантирует, что все компиляторы будут выдавать предупреждения, когда код использует этот программный элемент. Напротив, нет никакой гарантии, что все компиляторы всегда будут выдавать предупреждения на основе @deprecatedтега Javadoc, хотя компиляторы Sun в настоящее время делают это. Другие компиляторы могут не выдавать такие предупреждения. Таким образом, использование @Deprecatedаннотации для генерации предупреждений более переносимо, чем использование @deprecatedтега Javadoc.

Вы можете найти полный документ в разделе Как и когда не рекомендуется использовать API.


1
Не совсем верно. И javadoc, и аннотация говорят, что метод компилятора устарел
Богемский

17
@ Bohemian На самом деле это не совсем так. Аннотация определяется в разделе 9.6.1.6 Спецификации языка Java ( java.sun.com/docs/books/jls/third_edition/html/… ), а тег javadoc - нет. Таким образом, аннотация является частью языка. Если вы решили написать свой собственный Java-компилятор, вы можете игнорировать тег javadoc, но вы должны распознать аннотацию.
ShaMan-H_Fel

@ ShaMan-H_Fel Я считаю, что модель Javadoc тоже работает. Потому что это был единственный выбор до Java 5, и он работал. Когда вы пометили метод @deprecatedтегом javadoc (в Java 4-), компилятор пометил метод (класс, поле) как устаревший, и в средах IDE появлялись предупреждения, даже когда источник не был доступен.
Амир Пашазаде

42

поскольку некоторые незначительные объяснения отсутствовали

Используйте @Deprecatedаннотацию для метода, подобного этому

 /**
 * @param basePrice
 * 
 * @deprecated  reason this method is deprecated <br/>
 *              {will be removed in next version} <br/>
 *              use {@link #setPurchasePrice()} instead like this: 
 * 
 * 
 * <blockquote><pre>
 * getProduct().setPurchasePrice(200) 
 * </pre></blockquote>
 * 
 */
@Deprecated
public void setBaseprice(int basePrice) {
}

не забудьте объяснить:

  1. Почему этот метод больше не рекомендуется . Какие проблемы возникают при его использовании. Предоставьте ссылку на обсуждение по этому вопросу, если таковые имеются. (не забудьте разделить строки для удобства чтения<br/>
  2. Когда это будет удалено . (пусть ваши пользователи знают, насколько они все еще могут положиться на этот метод, если они решат придерживаться старого способа)
  3. Укажите решение или ссылку на метод, который вы рекомендуете {@link #setPurchasePrice()}

Разве это не должно быть <br/>, а не </br>?
argh1969

@ argh1969, верно! не помню, откуда я взял шаблон тогда. Но я могу подтвердить, что обе версии работают. Хотя я редактирую в пользу стандартов.
Азерафати

37

Вы можете сделать две вещи:

  1. Добавить @Deprecated аннотацию к методу и
  2. Добавьте @deprecatedтег к javadoc метода

Вы должны сделать оба !

Цитирую документацию по Java на эту тему:

Начиная с J2SE 5.0, вы осуждаете класс, метод или поле с помощью аннотации @Deprecated. Кроме того, вы можете использовать тег @deprecated Javadoc, чтобы сообщить разработчикам, что использовать вместо этого.

Использование аннотации заставляет компилятор Java генерировать предупреждения при использовании устаревшего класса, метода или поля. Компилятор подавляет предупреждения об устаревании, если устаревший модуль компиляции использует устаревший класс, метод или поле. Это позволяет создавать устаревшие API без создания предупреждений.

Настоятельно рекомендуется использовать тег Javadoc @deprecated с соответствующими комментариями, объясняющими, как использовать новый API. Это гарантирует, что разработчики получат работоспособный путь перехода от старого API к новому API


8

Используйте аннотацию @Deprecated для вашего метода, и вы должны также упомянуть об этом в своем Javadocs.


Ссылка теперь не работает
Yetti99

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.