JPCERT コーディネーションセンター

MET02-J. 非推奨(deprecated)あるいは廃止された(obsolete)クラスやメソッドを使用しない

新規開発するコードでは、非推奨(deprecated)のフィールド、メソッド、クラスを使用してはならない。Java SE 6のドキュメントには非推奨APIの一覧が記載されている[API 2006]。特定のフィールドやメソッド、クラスが非推奨であることを表すためにJavaのアノテーション@deprecatedが用意されている。java.util.Dateのメソッドの多く、たとえばDate.getYear()は、非推奨であることが明示されている。「THI05-J. スレッドの強制終了にThread.stop()メソッドを使用しない」では非推奨メソッドであるThread.stop()を用いた場合に発生する問題について記述している。

また、廃止(obsolete)されたフィールドやメソッド、クラスも使用してはならない。廃止を示すためのアノテーションはJavaには存在しないが、いくつかのクラスやメソッドは廃止であることがドキュメントに記されている。たとえば、java.util.Dictionaryクラスは廃止されており、新規開発するコードでは代わりにjava.util.Map<K,V>を用いるべきである。

廃止されたメソッドとクラス

以下に挙げるメソッドやクラスを使用してはならない。

対象となるクラスやメソッド 代替のクラスやメソッド ルール
java.lang.Character.isJavaLetter() java.lang.Character.isJavaIdentifierStart()  
java.lang.Character.isJavaLetterOrDigit() java.lang.Character.isJavaIdentifierPart()  
java.lang.Character.isSpace() java.lang.Character.isWhitespace()  
java.lang.reflect.Class.newInstance() java.lang.reflect.Constructor.newInstance() ERR06-J. Do not let code throw undeclared checked exceptions
java.util.Date (many methods) java.util.Calendar  
java.util.Dictionary java.util.Map<K,V>  
java.util.Properties.save() java.util.Properties.store()  
java.lang.Thread.run() java.lang.Thread.start() THI00-J. Do not invoke Thread.run()
java.lang.Thread.stop() java.lang.Thread.interrupt() THI05-J. Do not use Thread.stop() to terminate threads
java.lang.ThreadGroup (many methods) java.util.concurrent.Executor THI01-J. Do not invoke ThreadGroup methods

JVM Profiler Interface(JVMPI)およびJVM Debug Interface(JVMDI)は非推奨であり、JVM Tool Interface(JVMTI)に代替されている。詳しくは「ENV05-J. 遠隔から監視できる状態のままアプリケーションを実運用しない」を参照。

リスク評価

非推奨あるいは廃止されたクラスやメソッドを使用すると、プログラムの誤動作につながる恐れがある。

ルール 深刻度 可能性 修正コスト 優先度 レベル
MET02-J P18 L1
自動検出

非推奨メソッドの使用を検知するのは容易である。廃止されたメソッドやスレッドセーフでないメソッドの使用を自動検出する方法は存在しない。

関連ガイドライン
ISO/IEC TR 24772:2010 Deprecated language features [MEM]
MITRE CWE CWE-589. Call to non-ubiquitous API
参考文献
[API 2006] Deprecated API, Dictionary
[SDN 2008] Bug database, Bug ID 4264153
翻訳元

これは以下のページを翻訳したものです。

MET02-J. Do not use deprecated or obsolete classes or methods (revision 84)

Top へ

Topへ
最新情報(RSSメーリングリストTwitter