Як оголосити або позначити метод Java як застарілий?


284

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

Але все ж хотілося б, щоб це було в моєму API. Я просто хочу показати "попередження" всім, хто використовує цей метод.

Як я можу цього досягти?


10
Чи @Deprecrated не є для вас варіантом?
templatetypedef

18
Так, але я про це не знав ... ось чому я задаю питання :)
Павло Янічек,


4
коментарі - це не місце для відповідей!
mattumotu

Відповіді:


577

Використовувати @Deprecatedза методом. Не забудьте про уточнення поля javadoc:

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

2
Як зв’язати зовнішню бібліотеку? наприклад: com.hello.api.PublicController # new
Faizan Kazi

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

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, правильно! не пам'ятаю, звідки я тоді отримав шаблон. Але я можу підтвердити роботу обох версій. Хоча я редагую на користь стандартів.
azerafati

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.