2012-01-27 6 views
224

Chciałbym, aby jedna z moich metod była "przestarzała" = nie była już używana.Jak zadeklarować lub oznaczyć metodę Java jako nieaktualną?

Ale nadal chciałbym mieć to w moim API. Chcę tylko pokazać "ostrzeżenie" każdemu, kto używa tej metody.

Jak mogę to osiągnąć?

+9

Czy @Deprecrated nie jest opcją dla ciebie ? – templatetypedef

+11

To jest, ale nie wiedziałem o tym ... to dlatego zadaję pytanie :) –

+11

Należy uważnie zanotować pisownię "@ Przestarzałe". 3 e's, nie 4. (również nie ma drugiego "r";). –

Odpowiedz

467

Użyj metody @Deprecated na metodzie. Nie zapomnij o wyjaśnienie pole javadoc:

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

Dobre przykłady są zawsze pomocne, dziękuję. –

+1

Krótka i dobra odpowiedź! – Robert

+5

Czy na pewno byłoby dobrze, gdyby @Deprecated miał parametr, z którego zamiast tego korzystać ... – LinuxLars

30

Są dwie rzeczy, które możesz zrobić:

  1. Dodaj @Deprecated adnotacji do sposobu i
  2. Dodaj @deprecated tag do javadoc metody

Należy zrobić zarówno!

Cytowanie java documentation na ten temat:

Począwszy J2SE 5.0, ty potępiać do klasy, metody lub pola za pomocą adnotacji @Deprecated. Ponadto można użyć znacznika @adaptowany Javadoc, aby programiści mogli się z tego dowiedzieć.

Użycie adnotacji powoduje, że kompilator Java generuje ostrzeżenia, gdy używana jest nieaktualna klasa, metoda lub pole. Kompilator pomija ostrzeżenia o wycofaniu, jeśli wycofana kompilacja używa wycofanej klasy, metody lub pola. Umożliwia to tworzenie starszych API bez generowania ostrzeżeń.

Zdecydowanie zaleca się używanie znacznika Javadoc @deprecated z odpowiednimi komentarzami wyjaśniającymi, jak korzystać z nowego interfejsu API. Dzięki temu programiści będą mieli sprawną ścieżkę migracji ze starego interfejsu API do nowego interfejsu API

+0

Oznacza to, że komentarz javadoc jest zdecydowanie zalecany *** dodatkowo *** do adnotacji, a nie jako zamiennik! Dlatego zawsze lepiej jest umieścić oba. –

+0

@ morellet.d Dzięki za wskazanie tego. Zasadniczo przepisałem teraz swoją odpowiedź (nie przeczytałem dostatecznie dokładnie!). Pozdrawiam – Bohemian

7

Użyj annotation@Deprecated do sposobu i należy również wspomnieć o tym w swoim Javadocs.

3

Spójrz na adnotację @Deprecated.

68

Użyj zarówno adnotacji @Deprecated, jak i znacznika JavaDoc @deprecated.

Tag JavaDoc służy do celów dokumentacyjnych.

Adnotacja @Deprecated instruuje kompilator, że metoda jest przestarzała. Oto, co mówi się w dokumencie Słońce/wyrocznie na temat:

Używanie @Deprecated adnotacji do potępiać klasę, metody lub pola zapewnia, że ​​wszystkie kompilatory będą wydawać ostrzeżenia, gdy kod używa tego elementu programu. W przeciwieństwie do tego nie ma gwarancji, że wszystkie kompilatory będą zawsze wydawały ostrzeżenia w oparciu o znacznik Javadoc, choć kompilacje firmy Sun obecnie to robią. Inne kompilatory mogą nie wysyłać takich ostrzeżeń.Tak więc użycie komentarza do generowania ostrzeżeń jest bardziej przenośne niż użycie znacznika Javadoc.

można znaleźć pełny dokument w How and When to Deprecate APIs

+1

Nie całkiem prawdziwe. * Zarówno * javadoc, jak i adnotacja informują, że metoda kompilatora jest przestarzała. – Bohemian

+14

@Bohemian Właściwie to nie jest do końca prawdą. Adnotacja jest zdefiniowana w Specyfikacji języka Java w sekcji 9.6.1.6 (http://java.sun.com/docs/books/jls/third_edition/html/interfaces.html # 9.6.1.6), podczas gdy tag javadoc nie. Adnotacja jest więc częścią języka. Jeśli zdecydujesz się na napisanie własnego kompilatora Java, możesz zignorować tag javadoc, ale musisz rozpoznać adnotację. –

+0

@ ShaMan-H_Fel Uważam, że również działa model javadoc. Ponieważ był to jedyny wybór przed Java 5 i działał. Po oznaczeniu metody za pomocą znacznika javadoc '@ deprecated' (w języku Java 4-) kompilator oznaczył metodę (klasa, pole) jako wycofany, a IDE wyświetlały ostrzeżenia, nawet jeśli nie było dostępnych źródeł. –

28

ponieważ pewne drobne wyjaśnienia brakowało

Korzystając @Deprecated adnotacji o sposobie jak ten

/** 
* @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) { 
} 

pamiętać, aby wyjaśnić:

  • Dlaczego ta metoda nie jest już zalecane, Pamiętaj, aby linia oddzielne dla czytelności </br>
  • Kiedy zostanie on usunięty (niech użytkownicy wiedzą, ile mogą nadal powoływać się na tę metodę, jeśli postanowili trzymać się starej drodze)
  • stanowić rozwiązanie lub link do metody polecacie {@link #setPurchasePrice()}