抑制 Java 中不推荐使用的导入警告

Posted

技术标签:

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

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

import SomeDeprecatedClass;

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

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

【问题讨论】:

是的,那将是理想的,但在这种情况下,我使用的 Hadoop 库使用了最近被弃用的 API 的一部分,所以如果我想我真的别无选择使用这个库。另外,这只是一个学校项目,不是任何需要维护的东西。 【参考方案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。这个答案确实回答了这个问题:***.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")

【讨论】:

以上是关于抑制 Java 中不推荐使用的导入警告的主要内容,如果未能解决你的问题,请参考以下文章

Java中@SuppressWarnings注解可以使用的参数列表

如何在 Kotlin 中抑制检查式警告

使用 React,在使用 react-transition-group 时,在 StrictMode 中不推荐使用 findDOMNode 作为警告

java@SuppressWarnings

抑制 PDO 警告

为啥我不能使用 warnings.filterwarnings 使用正则表达式来抑制警告