S-JIS[2008-08-20/2017-09-23] 変更履歴

Java非推奨

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タグはコンパイルには何も影響を与えない))

→Sunのいつ、どのように API を非推奨とするか


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() {
		//オーバーライドしたメソッド
		〜
	}

Java目次へ戻る / 新機能へ戻る / 技術メモへ戻る
メールの送信先:ひしだま