Javaのクラスやメソッドの「非推奨」指定について。
Javadocを見ていると、たまに「推奨されていません」と書いてあるクラスやメソッド等がある。[2004-06-29]
これは、そのクラスやメソッドを使うべきではないという事を意味している。[2017-09-23]
親切な場合は、Javadocに代替手段が書かれている。
非推奨のメソッドを使っていると、コンパイル時に警告が発せられる(コンパイラーの警告レベルによっては)。
@Deprecatedアノテーションが導入された当時、非推奨の説明で「(このアノテーションが付けられたクラスやメソッドは)将来廃止される」といった説明がされていることがあった。[2017-09-23]
実際は、必ずしも廃止されることを意味しない。
Java9から、@Deprecatedアノテーションに「将来廃止予定かどうか」という情報(forRemoval)を付与できるようになった。
自分で作ったメソッドを非推奨メソッドにしたい場合、メソッドのJavadocに@deprecatedタグを記入する。
代替メソッドがある場合、@seeタグや@linkタグを加えるのもマナー(?)らしい。
/**
* @deprecated 推奨されないよ♪じゃん!(ポリンキーのCM風に(笑))
* @see Hoge#func()
*/
public int func1() {
〜
}
@deprecatedタグをJavadocコメントに加えておくことで、コンパイラーも 「そのメソッドが非推奨である」と認識する。
JDK1.5からは、アノテーションでも非推奨を示せるようになった。[2008-02-22]
/**
* @deprecated 推奨されないよ♪じゃん! {@link Hoge#func()}を使ってね。(ポリンキーのCM音楽風)
*/
@Deprecated public int func1() {
〜
}
(@deprecatedタグと@Deprecatedアノテーションを両方指定するのが一般的らしい)
@Deprecatedアノテーションは、「非推奨である」という事をコンパイラーに知らせる為に使う。[2010-03-04]
Javadocの
@deprecatedタグは、非推奨である理由や代替手段をプログラマーに知らせる為に使う。
(実際には、コンパイラーはJavadocの@deprecatedも解釈して非推奨を判断する(他のJavadocタグはコンパイルには何も影響を与えない))
Java9で、@Deprecatedアノテーションに情報が書けるようになった。[2017-09-23]
@Deprecated(since="9", forRemoval=true)
情報 | 説明 |
---|---|
since |
どのバージョンから非推奨になったか。 |
forRemoval |
このアノテーションを付けられたクラスやメソッドが、将来廃止予定なのかどうか。 |
非推奨メソッドを使った(呼び出した)場合の警告を出さないようにするには@SuppressWarnings("deprecation")を使う。[2008-08-24]
@SuppressWarnings("deprecation") int r = func1();
非推奨メソッドをオーバーライドした場合の警告を出さないようにするには@Deprecatedアノテーションを付けるのが素直。[2008-10-25]
@Override @Deprecated public int func1() { //オーバーライドしたメソッド 〜 }