【问题标题】:Suppress deprecated import warning in Java抑制 Java 中不推荐使用的导入警告
【发布时间】:2010-12-23 21:38:35
【问题描述】:

在 Java 中,如果您导入了已弃用的类:

import SomeDeprecatedClass;

您收到此警告:The type SomeDeprecatedClass is deprecated

有没有办法抑制这个警告?

【问题讨论】:

  • 是的,那将是理想的,但在这种情况下,我使用的 Hadoop 库使用了最近被弃用的 API 的一部分,所以如果我想我真的别无选择使用这个库。另外,这只是一个学校项目,不是任何需要维护的东西。

标签: java import deprecated suppress-warnings


【解决方案1】:

要避免警告: 做导入类

改为使用完全限定的类名

并在尽可能少的地方使用它。

【讨论】:

  • +1 这应该是公认的答案。它的好处是不会抑制整个类的弃用。
  • 这是更好的答案,班级级别的@SuppressWarnings 不包括导入
  • 这是 Java 9 之前的最佳答案,最终修复:bugs.openjdk.java.net/browse/JDK-8032211
【解决方案2】:

在你的类或方法上使用这个注解:

@SuppressWarnings( "deprecation" )

【讨论】:

  • 这对进口有效吗?我已经在方法等上使用了该注释,但导入时似乎无法识别它。
  • 在类级别使用注释也应该涵盖导入。它至少在 Eclipse(好吧,Rational Application Developer)中为我做到了这一点,但我不确定在命令行编译期间。
  • 它似乎不适用于命令行 "javac" 或 ant 的 任务。 -Xlint:-deprecation 标志也没有。看起来像一个 javac 错误。
  • 如果弃用是静态字段和本地 SuppressWarnings 的一部分,则不起作用。完全限定的类名似乎是这里更好的方法。
  • 答案不应该在顶部,因为问题是关于“导入”语句的,并且该修复仅适用于 Eclipse/Intellij(根据 cmets 似乎如此),但最终来源事实上,修复程序不起作用的 javac。这个答案确实回答了这个问题:stackoverflow.com/a/20909204/2032701
【解决方案3】:

作为 hack,您不能在代码中进行导入并使用完全限定名称。

您也可以尝试 javac -Xlint:-deprecation 不确定是否可以解决问题。

【讨论】:

    【解决方案4】:

    我通过将导入更改为:

    import package.*
    

    然后用@SuppressWarnings("deprecation")注释使用过时类的方法

    【讨论】:

    • 不要从整个包中导入所有内容。它会影响性能。不必要的编译器将加载所有类将导致严重的性能问题。始终确保导入中不存在未使用的类。
    • 这里以百科全书为例(是的,我约会过自己) - 如果您正在寻找有关猩猩的信息,您是直接拿“O”书还是拿所有书?
    • @Arundev,要清楚,你的意思是编译可能需要更长的时间才能完成,但在运行时,这不会对执行性能产生任何影响,对吧?
    • @Paulo - 这就是我想说的,它会检查导入的类的可用性,即使它没有被使用。因此,如果您有很多未使用的导入,最好将其删除。
    【解决方案5】:

    假设您使用已弃用的方法(例如java.sql.ResultSet 中的getUnicodeStream(String columnLabel))覆盖/实现接口,那么仅使用注释@SuppressWarnings( "deprecation" ) 将无法消除弃用警告,除非您还注释与 @Deprecated 注释相同的新方法。这是合乎逻辑的,因为否则您可以不推荐方法,只需覆盖其接口描述。

    【讨论】:

    • 这种“@SuppressWarnings”和“@Deprecated”的组合也适用于在您自己的方法中调用已弃用的方法。
    • 我一直在寻找这个解释。谢谢!
    【解决方案6】:

    你可以使用:

    javac FileName.java -Xlint:-deprecation

    但这会给你警告,并告诉你导致弃用或使用弃用 API 的代码部分。现在,您可以运行带有这些警告的代码,也可以对代码进行适当的更改。

    就我而言,我使用的是someListItem.addItem("red color"),而编译器希望我使用someListItem.add("red color");

    【讨论】:

      【解决方案7】:

      如果@SuppressWarnings("deprecation") 不适合你,就像我一样。您可以在 sonar lint 插件中找到确切的 squid 编号。然后你可以简单地抑制警告:@SuppressWarnings("squid:CallToDeprecatedMethod")

      【讨论】:

        猜你喜欢
        • 2020-01-31
        • 1970-01-01
        • 2020-05-14
        • 1970-01-01
        • 2020-02-23
        • 2019-09-21
        • 2016-09-19
        • 2015-02-26
        相关资源
        最近更新 更多