抑制 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 的作为 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注解可以使用的参数列表
使用 React,在使用 react-transition-group 时,在 StrictMode 中不推荐使用 findDOMNode 作为警告