Never use deprecated fields, methods, or classes in new code. The Java SE 6 documentation provides a [complete list|http://download.oracle.com/javase/6/docs/api/deprecated-list.html] of deprecated APIs \[[API 2006|AA. Bibliography#API 06]\]. Java provides a {{@deprecated}} annotation to indicate the deprecation of specific fields, methods, and classes. For instance, many methods of {{java.util.Date}}, such as {{Date.getYear()}}, have been explicitly deprecated. The rule [THI05-J. Do not use Thread.stop() to terminate threads|THI05-J. Do not use Thread.stop() to terminate threads] describes issues that can result from using the deprecated {{Thread.stop()}} method. |
Obsolete fields, methods, and classes should not be used. Java provides no annotation to indicate obsolescence, but several objects are documented as obsolete. For instance, the {{java.util.Dictionary}} class is marked as obsolete, and new code should use {{java.util.Map<K,V>}} instead \[[API 2006|AA. Bibliography#API 06]\]. |
Finally, several classes and methods impose particular limitations on their use. For instance, all of the subclasses of the abstract
class java.text.Format
are thread-unsafe. These classes must be avoided in multithreaded code.
The following methods and classes must not be used:
Class or Method |
Replacement |
Rule |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
ERR06-J. Do not let code throw undeclared checked exceptions |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
The JVM Profiler Interface (JVMPI) and JVM Debug Interface (JVMDI) are also deprecated and have been replaced by the JVM Tool Interface (JVMTI), see rule ENV05-J. Do not deploy an application that can be remotely monitored for more information.
Using deprecated or obsolete classes or methods in program code can lead to erroneous behavior.
Rule |
Severity |
Likelihood |
Remediation Cost |
Priority |
Level |
---|---|---|---|---|---|
MET02-J |
high |
likely |
medium |
P18 |
L1 |
Detecting uses of deprecated methods is straightforward. Obsolete methods and thread-unsafe methods have no automatic means of detection.
<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="698cdcd3-4234-4ed0-bebe-b498e846e64c"><ac:plain-text-body><![CDATA[ |
[ISO/IEC TR 24772:2010 |
http://www.aitcnet.org/isai/] |
"Deprecated Language Features [MEM]" |
]]></ac:plain-text-body></ac:structured-macro> |
CWE-589, "Call to Non-ubiquitous API" |
<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="4ff86b95-e104-41af-813d-6c9961fa12f5"><ac:plain-text-body><![CDATA[ |
[[API 2006 |
AA. Bibliography#API 06]] |
[Deprecated API |
http://java.sun.com/javase/6/docs/api/deprecated-list.html], [Dictionary |
http://download.oracle.com/javase/6/docs/api/java/util/Dictionary.html] |
]]></ac:plain-text-body></ac:structured-macro> |
<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="fb54b2ad-2d4e-4810-824b-1ffc57b2b3df"><ac:plain-text-body><![CDATA[ |
[[SDN 2008 |
AA. Bibliography#SDN 08]] |
Bug database, [Bug ID 4264153 |
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4264153] |
]]></ac:plain-text-body></ac:structured-macro> |
MET01-J. Never use assertions to validate method parameters 05. Methods (MET)