在代码编译过程中遇到警告消息“使用或重写已弃用的 API”
我编译了我的程序,我得到了以下错误。我应该如何解决?
Note: ClientThreadClients.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
我编译了我的程序,我得到了以下错误。我应该如何解决?
Note: ClientThreadClients.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
您应该做的是按照警告消息所说的去做。使用该选项重新编译该类。然后,编译器将告诉您正在使用或重写的已弃用 API。-Xlint:deprecation
如何做到这一点?
如果您使用命令 shell 进行编译,只需将该选项添加到命令行即可。javac
-Xlint:deprecation
对于 Maven 构建,请按如下方式运行 maven:
mvn clean install -Dmaven.compiler.showDeprecation=true
对于 Gradle 构建,请将以下内容添加到根构建文件中:
allprojects {
tasks.withType(JavaCompile) {
options.deprecation = true
}
}
或在特定编译任务上设置选项。
对于 Ant 构建,请在任务中将属性设置为 。deprecation
true
javac
对于 IDE:
确定导致问题的 API 后,有三种方法可以“解决”错误。
您可以阅读已弃用 API 的 javadocs,以找出它不推荐使用的原因。然后,根据javadocs所说的内容和上下文,您需要找到一种方法,将代码对已弃用元素的使用替换为更好的内容。
您可以使用注释告诉编译器对此“保持安静”。@SuppressWarnings("deprecation")
这通常是一个坏主意:
已弃用的 API 可能会在将来的版本中被删除,这将阻止您的代码在升级时运行。(建议您查看有关删除已弃用 API 的产品策略。
已弃用的 API 可能存在根本性缺陷,在某些情况下会使您的应用程序不可靠。
对这些警告的不公正压制只是创造了技术部门,您或您的继任者将来必须解决。
如果弃用警告是由于 Java SE 本身或您正在使用的第三方 API 中的更改引起的,则可以通过回滚到未显示警告的版本来“解决”它。这甚至比前一个更糟糕的想法。通过回滚,您只是让技术部门积累。
(对于这个特定示例,我的猜测是 OP 使用了 Thread
类中已弃用的方法之一:
countStackFrames()
destroy()
pause()
resume()
stop()
stop(Throwable)
suspend()
这些方法要么不可靠,要么不安全,要么两者兼而有之,强烈建议您不要使用它们。阅读此说明:“为什么 Thread.stop、Thread.suspend 和 Thread.resume 已弃用?”。
步骤 1:找出代码正在使用的已弃用 API。如果使用现代 IDE(eclipse 或类似工具),则弃用的代码将被清楚地标记,通常使用删除线字体。如果从命令提示符编译,请在编译时添加到命令行。-Xlint:deprecation
步骤2.阅读已弃用 API 的文档,了解如何替换它。