@SuppressWarnings有什么用?

时间:2011-12-20 09:22:24

标签: java annotations suppress-warnings

我不了解Java的这个功能。我知道它使编码更容易,有时看起来更整洁,但实际使用的是什么?相反,我觉得,最好显示警告,因为将来任何人都可以在修改代码之前引用它们。这个@SuppressWarnings是否会提高压缩效率,还是根据任何编码标准?

6 个答案:

答案 0 :(得分:9)

在编程时,您应该注意编译器警告,并且在最好的情况下编译代码时没有警告(当然也有错误)。

但有时你无法摆脱警告,你知道代码是正确的还是无法改变。那么你不希望每次都从编译器中发现错误。

所以你可以用你提到的命令来压制它。

答案 1 :(得分:6)

其他答案已经解释了很多@SuppressWarnings的用例,但我想强调一点,有时你绝对需要使用@SuppressWarnings来克服语言本身的局限性,在这些情况下,@SuppressWarnings的使用绝对合法。

在其他情况下,使用@SuppressWarnings可能会被认为是有问题的,因为在这些情况下,您总是可以通过更改代码来消除警告(但显然,它并不总是可以接受)。

以下是一些常见情况:如果没有@SuppressWarnings绝对无法删除警告:

  • 实现支持数组的通用集合(因为您无法创建通用数组)
  • 从类到其实现的Map(因为您无法将不同的泛型类型参数值分配给不同的地图)

答案 2 :(得分:3)

当您处理不支持泛型的遗留代码(Java <= 1.4)时,这是摆脱强制转换警告的唯一可行方法。

答案 3 :(得分:1)

实际用途是抑制警告。而已。没有更少,仅此而已。我不认为它会影响任何编译效率,但绝对不会影响运行时效率。

答案 4 :(得分:1)

编译期间将使用SuppressWarnings(因此,只有编译器知道在看到SuppressWarnings注释时该怎么做)。

JavaDoc州:

  

编译器中要抑制的一组警告   带注释的元素。允许重复的名称。第二个和   连续出现的名称将被忽略。存在   无法识别的警告名称不是错误:编译器必须忽略任何错误   他们不认识的警告名称。但是,它们可以自由发射   如果注释包含无法识别的警告名称,则发出警告。

答案 5 :(得分:1)

使用@SuppressWarnings有几个原因,但其中一个最有用的案例是:

  • 拥有数千个警告的现有项目。您希望您的团队现在关注警告,但您没有时间修复所有警告。

    Annotation让您有机会抑制一些无法快速修复并获得“干净”基础的警告。

    这个干净的基础是必不可少的,因为当有成千上万的代码时,没有人会害怕用警告检查代码,但是当代码库没有警告并且团队中的其他人立即看到某人正在检查时,他们会害怕在代码中有2个警告左右。

  • 您正在使用第三方库,因此您会因为在大多数情况下更改您不想要的lib代码而无法修复警告。

在我看来,第一个原因是@SuppressWarnings的最佳用例之一。