Java “警告信息”;使用或覆盖不推荐使用的API“;在代码编译期间遇到

Java “警告信息”;使用或覆盖不推荐使用的API“;在代码编译期间遇到,java,multithreading,Java,Multithreading,我编译了我的程序,我得到了以下错误。我应该如何解决它 Note: ClientThreadClients.java uses or overrides a deprecated API. Note: Recompile with -Xlint:deprecation for details. 你应该做的是按照警告信息所说的去做。使用-Xlint:deprecation选项重新编译该类。然后,编译器将告诉您正在使用或覆盖哪些已弃用的API 怎么做 如果使用javac从命令shell编译,只需将

我编译了我的程序,我得到了以下错误。我应该如何解决它

Note: ClientThreadClients.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.

你应该做的是按照警告信息所说的去做。使用
-Xlint:deprecation
选项重新编译该类。然后,编译器将告诉您正在使用或覆盖哪些已弃用的API

怎么做

  • 如果使用
    javac
    从命令shell编译,只需将
    -Xlint:deprecation
    选项添加到命令行

  • 对于Maven构建,按如下方式运行Maven:

    mvn clean install -Dmaven.compiler.showDeprecation=true
    
  • 对于Gradle生成,将以下内容添加到根生成文件:

    allprojects { 
        tasks.withType(JavaCompile) { 
            options.deprecation = true
        }
    }
    
    或者在特定的编译任务上设置该选项

  • 对于Ant构建,在
    javac
    任务中将
    deprecation
    属性设置为
    true

  • 对于IDE:

    • 日食:见
    • NetBeans:请参阅
    • Intellij:看到了吗

一旦确定了导致问题的API,有两种方法可以“解决”错误

  • 您可以阅读javadocs中不推荐使用的API,以了解其不推荐使用的原因。然后,根据javadocs所说的内容和上下文,您需要找到一种方法,以更好的方式替换代码中不推荐使用的元素

  • 您可以使用
    @SuppressWarnings(“弃用”)
    注释告诉编译器对此保持“安静”

    这通常是个坏主意:

    • 不推荐使用的API可能会在将来的版本中删除,这将阻止您的代码在升级时运行。(建议您查看有关删除不推荐的API的产品政策。)

    • 不推荐使用的API可能有一些基本缺陷,在某些情况下会使应用程序不可靠


  • (对于这个特定的示例,我的猜测是OP使用了类中不推荐的方法之一:

    • countStackFrames()
    • destroy()
    • pause()
    • resume()
    • stop()
    • 停止(可丢弃)
    • suspend()
    这些方法要么不可靠,要么不安全,要么两者兼而有之,强烈建议您不要使用它们。请阅读以下说明:“。”


    有人在评论中指出,他们收到了弃用警告,因为他们在类路径上有两个不同版本的库。他们“修复了它”“除掉其中一个。事实上,在这种情况下,真正的原因可能是库的较新版本已经弃用了一些API类或方法,它们的应用程序是根据这些API类或方法编译的。他们的“修复”实际上是回滚到旧版本的API


    可以说,这是一件坏事。他们的应用程序现在依赖于旧版本的API,至少在他们能够找出问题的真正原因之前是如此。问题是,他们正在积累技术债务,最终需要以某种方式解决。

    步骤1:找出代码使用的是哪种不推荐的API。如果使用现代IDE(eclipse或类似工具),不推荐使用的代码将被清楚地标记,通常使用删除线字体。如果从命令提示符下编译,请在编译时将
    -Xlint:deprecation
    添加到命令行

    第二步。阅读不推荐使用的API的文档,了解如何替换它