Never use deprecated fields, methods, or classes in new code. Java also provides a @deprecated
annotation to indicate the deprecation of specific fields, methods, and classes. For example, many methods of java.util.Date
, such as Date.getYear()
, have been explicitly deprecated. Rule THI05-J. Do not use Thread.stop() to terminate threads describes issues that can result from using the deprecated Thread.stop()
method.
The Java SE documentation provides a list of deprecated APIs for each version of the language:
You should use the list of deprecated functions specific to the language version you are using, although it may also be possible to avoid the use of APIs that are deprecated in later versions as well if suitable alternatives are available.
Obsolete fields, methods, and classes should not be used. Java lacks any annotation that indicates obsolescence; nevertheless, several classes and methods are documented as obsolete. For instance, the java.util.Dictionary<K,V>
class is marked as obsolete; new code should use java.util.Map<K,V>
instead [API 2006].
Obsolete Methods and Classes
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 Java Virtual Machine (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.
Risk Assessment
Using deprecated or obsolete classes or methods in program code can lead to erroneous behavior.
Rule | Severity | Likelihood | Remediation Cost | Priority | Level |
---|---|---|---|---|---|
MET02-J | Low | Unlikely | Medium | P2 | L3 |
Automated Detection
Detecting uses of deprecated methods is straightforward. Obsolete methods have no automatic means of detection.
Related Guidelines
Deprecated language features [MEM] | |
CWE-589. Call to non-ubiquitous API |
Android Implementation Details
The Android SDK also has deprecated or obsolete APIs. Also, there may exist incompatible APIs depending on the SDK version. Therefore, it is recommended that developers refer to the "Android API Difference report" and consider replacing the deprecated APIs.
Bibliography
[API 2006] | |
[SDN 2008] | Bug database, Bug ID 4264153 |