Javaメソッドを非推奨または宣言する方法


284

私のメソッドの1つを「非推奨」にしたい=もう使用しません。

しかし、それでも私はそれを私のAPIに入れたいです。私はその方法を使用しているすべての人に「警告」を表示したいだけです。

どうすればそれを達成できますか?


10
@Deprecratedはオプションではありませんか?
templatetypedef

18
それはそうですが、私はそれについて知りませんでした...それが私が質問をしている理由です:)
Pavel Janicek


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 2017

@LinuxLarsは完全に同意しました!Java 9はいくつかの属性を追加して非推奨を真剣に受け止めるようにしましたがreason、デフォルト値の別の属性を追加し""ても害はありませんでした
asgs

3
@deprecatedコメント内のメッセージを追加できるようにしたいのですが@Deprecated(すべてを修正するための1つのスポット)...
U.ウィンドル

88

両方を使用し@Deprecated、注釈と@deprecated JavaDocタグのます。

@deprecatedJavaDocのタグは、文書化のために使用されます。

@Deprecated注釈は、この方法は推奨されていることをコンパイラに指示します。これは、この件に関するSun / Oraclesのドキュメントでの説明です。

使用する@Deprecatedコードは、そのプログラム要素を使用する場合、すべてのコンパイラが警告を発行することを、クラス、メソッド、またはフィールドの性を保証を廃止するために注釈を。対照的に、@deprecatedSunコンパイラは現在、すべてのコンパイラがJavadocタグに基づいて常に警告を発行するという保証はありません。他のコンパイラはそのような警告を発しないかもしれません。したがって、@Deprecatedアノテーションを使用して警告を生成する方が、@deprecatedJavadocタグに依存するよりも移植性が高くなります。

完全なドキュメントは、APIを非推奨にする方法と時期にあります。


1
まったくそうではありません。javadocと注釈tellコンパイラーメソッドの両方が非推奨
ボヘミアン

17
@Bohemian実はそうではありません。アノテーションはJava言語仕様セクション9.6.1.6(java.sun.com/docs/books/jls/third_edition/html/…)で定義されていますが、javadocタグは定義されていません。したがって、注釈は言語の一部です。独自のJavaコンパイラを作成する場合は、javadocタグを無視できますが、注釈を認識する必要があります。
ShaMan-H_Fel 2012年

@ ShaMan-H_Fel javadocモデルも機能すると思います。これはJava 5以前は唯一の選択肢でしたが、機能しました。メソッドを@deprecatedjavadocタグ(Java 4の場合)でマークすると、コンパイラーはメソッド(クラス、フィールド)を非推奨としてマークし、ソースが利用できない場合でもIDEは警告を表示しました。
アミールパシャザーデ2017

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 2018年

37

できることは2つあります。

  1. 追加 @Deprecatedメソッドにアノテーションを
  2. @deprecatedメソッドのjavadocにタグを追加します

あなたは両方をするべきです

このテーマに関するJavaドキュメントを引用:

J2SE 5.0以降では、@ Deprecatedアノテーションを使用してクラス、メソッド、またはフィールドを非推奨にします。さらに、@ deprecated Javadocタグを使用して、代わりに何を使用するかを開発者に伝えることができます。

アノテーションを使用すると、非推奨のクラス、メソッド、またはフィールドが使用されたときに、Javaコンパイラーが警告を生成します。非推奨のコンパイル単位が非推奨のクラス、メソッド、またはフィールドを使用する場合、コンパイラーは非推奨警告を抑制します。これにより、警告を生成せずにレガシーAPIを構築できます。

新しいAPIの使用方法を説明する適切なコメント付きのJavadoc @deprecatedタグを使用することを強くお勧めします。これにより、開発者は古いAPIから新しいAPIへの移行可能なパスを確保できます


つまり、アノテーションに加えて、javadocコメントを置き換えることを強くお勧めます。それが常に両方を置く方が良い理由です。
morellet.d 2013

@ morellet.d指摘いただきありがとうございます。私は今、基本的に私の答えを書き直しました(私はドキュメントを十分に読みませんでした!)。乾杯
ボヘミアン


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.