禁止在Java中使用过时的导入警告


111

在Java中,如果导入不推荐使用的类:

import SomeDeprecatedClass;

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

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


4
是的,这是理想的选择,但是在这种情况下,我正在使用针对Hadoop的库,该库使用其API的一部分已被弃用,因此如果要使用此库,我真的没有选择。另外,这仅用于学校项目,不需要维护任何内容。
Ed Mazur

Answers:


129

在您的类或方法上使用此注释:

@SuppressWarnings( "deprecation" )

29
这对进口有效吗?我在方法等上使用了该注释,但是导入似乎无法识别它。
Ed Mazur

2
在类级别使用注释也应涵盖导入。至少对我来说,它是在Eclipse(还是Rational Application Developer)中完成的,但是我不确定在命令行编译期间是否会这样做。
craigforster,2009年

20
它似乎不适用于命令行“ javac”或ant的<javac>任务。-Xlint:-deprecation标志也没有。好像是javac错误。
阿奇

1
如果弃用是静态字段和本地SuppressWarnings的一部分,则此方法不起作用。在这里,完全合格的类名似乎是更好的方法。
mheinzerling '16

16
答案不应该放在最前面,因为问题是关于“ import”语句的,并且该修补程序仅适用于Eclipse / Intellij(根据注释似乎如此),但最终的真理来源是javac,其修补程序不起作用。这个答案确实回答了这个问题:stackoverflow.com/a/20909204/2032701
Ruslan


14

作为黑客,您无法导入并在代码内使用完全限定名称。

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


9

我通过将导入更改为:

import package.*

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


不要从整个包中导入所有内容。它将影响性能。不必要的编译器将加载所有类,将导致严重的性能问题。始终使用导入中不存在未使用的类的方式。
阿伦杰夫

1
这里以百科全书为例(是的,我约会过)-如果您正在寻找有关猩猩的信息,您只是拿起“ O”书还是就拿起所有书?
Ascalonian '18

@Arundev,明确地说,您的意思是编译可能需要更长的时间才能完成,但是在运行时,这不会对执行性能产生任何影响,对吗?
Paulo

@Paulo-多数民众赞成在说什么,它将检查导入的类的可用性,即使未使用也是如此。因此,如果您有大量未使用的进口商品,最好将其删除。
阿伦杰夫(Arundev)

7

假设您要使用已弃用的方法(例如java.sql.ResultSet中的getUnicodeStream(String columnLabel))覆盖/实现一个接口,那么仅使用注解@SuppressWarnings(“ deprecation”)就不会摆脱弃用警告。 ,除非您还使用@Deprecated批注来批注相同的新方法。这是合乎逻辑的,因为否则您可以通过重写接口描述来“过分淘汰”方法。


“ @SuppressWarnings”和“ @Deprecated”的这种组合还可以在您自己的方法中调用不赞成使用的方法。
斯沃夫

1
我一直在寻找这种解释很久了。谢谢!
Jabari Dash

2

您可以使用:

javac FileName.java -Xlint:-弃用

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.