@SuppressWarnings 用法

从Java 5.0起,您可以使用java.lang.SuppressWarning注释,来停用与编译单元子集相关的编译警告。__

作用:用于抑制编译器产生警告信息。

Idea 设置泛型检查,变量、方法未使用检查

从 eclipse 转换到idea 发现有很多不习惯的地方,比如说

String s;
List list = new ArrayList();

没有未使用的变量,未检查泛型,未使用的方法提示,特意查找了一下相关资料

设置泛型检查

我使用的是mac电脑,windows电脑应该类似

打开如图

在这里插入图片描述

会出现如下页面

在这里插入图片描述

选择 editor —> inspections —> 搜索 Raw use of —> 勾上 Raw use of parameterized class

效果如图:

在这里插入图片描述

设置变量未使用提示

打开如图:

在这里插入图片描述

出现如下页面

在这里插入图片描述

在 Editor —> General —> Errors and Warnings —> 选择 Unused symbol

右侧勾选上 Error stripe mark 和 Effects 下面选择 Underwaved波浪线

参考:

https://blog.csdn.net/Lovincc/article/details/80464782

https://blog.csdn.net/codejas/article/details/78657560

变量未使用产生的警告

如上设置完成之后,变量未使用的提示应该是这样的:
在这里插入图片描述

如图 , list、set、map 都未被使用

1.为未使用的变量设置SuppressWarning

在方法前添加

@SuppressWarning("unused")

能够越过变量未使用检查,@SuppressWarning 中的属性我们稍后再讨论。

在这里插入图片描述

2.对未使用的方法添加SuppressWarning跳过方法未调用检查

可以在方法上添加SuppressWarning 跳过对方法未使用的检查

在这里插入图片描述

3.为单行泛型添加SuppressWarning 跳过泛型检查

在单个泛型代码上添加@SuppressWarning(“rawtypes”)可以跳过泛型检查,但是需要注意: 还需要在方法上添加

@SuppressWarning(“unchecked”)注释

在这里插入图片描述

如上图所示,可以对单个泛型设置@SuppressWarning 跳过类型检查

4. 为方法体上添加SuppressWarning 跳过泛型检查

如果一个方法体上含有多个未被检查的泛型,需要在方法体上添加@SuppressWarning(value={“unchecked”,“rawtypes”}) 跳过泛型检查

如图所示:

在这里插入图片描述

也可以使用 @SuppressWarning(“all”) ,来跳过所有的检查。

在这里插入图片描述

5.@SuppressWarning 中的属性介绍以及属性说明

  • all,抑制所有警告
  • boxing,抑制与封装/拆装作业相关的警告
  • cast,抑制与强制转型作业相关的警告
  • dep-ann,抑制与淘汰注释相关的警告
  • deprecation,抑制与淘汰的相关警告
  • fallthrough,抑制与switch陈述式中遗漏break相关的警告
  • finally,抑制与未传回finally区块相关的警告
  • hiding,抑制与隐藏变数的区域变数相关的警告
  • incomplete-switch,抑制与switch陈述式(enum case)中遗漏项目相关的警告
  • javadoc,抑制与javadoc相关的警告
  • nls,抑制与非nls字串文字相关的警告
  • null,抑制与空值分析相关的警告
  • rawtypes,抑制与使用raw类型相关的警告
  • resource,抑制与使用Closeable类型的资源相关的警告
  • restriction,抑制与使用不建议或禁止参照相关的警告
  • serial,抑制与可序列化的类别遗漏serialVersionUID栏位相关的警告
  • static-access,抑制与静态存取不正确相关的警告
  • static-method,抑制与可能宣告为static的方法相关的警告
  • super,抑制与置换方法相关但不含super呼叫的警告
  • synthetic-access,抑制与内部类别的存取未最佳化相关的警告
  • sync-override,抑制因为置换同步方法而遗漏同步化的警告
  • unchecked,抑制与未检查的作业相关的警告
  • unqualified-field-access,抑制与栏位存取不合格相关的警告
  • unused,抑制与未用的程式码及停用的程式码相关的警告

文章参考: https://www.ibm.com/support/knowledgecenter/zh-tw/SSQ2R2_9.1.1/org.eclipse.jdt.doc.user/tasks/task-suppress_warnings.htm

后记: @SuppressWarning 注解的主要作用就是抑制编译时期所产生的警告,从而提高程序的可读性,对于上面 @SuppressWarning 的所有属性,读者不用全部记忆,读两遍加深印象即可。用到的时候从google或者本文章都可查询。

J2SE 提供的最后一个批注是 @SuppressWarnings。该批注的作用是给编译器一条指令,告诉它对被批注的代码元素内部的某些警告保持静默。 一点背景:J2SE 5.0 为 Java 语言增加了几个新的特性,并且和它们一起增加了许多新的警告并承诺在将来增加更多的警告。您可以为 "javac" 增加 -Xlint 参数来控制是否报告这些警告(如上面的 @Deprecated 部分所示)。 默认情况下,Sun 编译器以简单的两行的形式输出警告。通过添加 -Xlint:keyword 标记(例如 -Xlint:finally),您可以获得关键字类型错误的完整说明。通过在关键字前面添加一个破折号,写为 -Xlint:-keyword,您可以取消警告。(-Xlint 支持的关键字的完整列表可以在 javac 文档页面上找到。)下面是一个清单: 关键字 用途 deprecation 使用了不赞成使用的类或方法时的警告 unchecked 执行了未检查的转换时的警告,例如当使用集合时没有用泛型 (Generics) 来指定集合保存的类型。 fallthrough 当 Switch 程序块直接通往下一种情况而没有 Break 时的警告。 path 在类路径、源文件路径等中有不存在的路径时的警告。 serial 当在可序列化的类上缺少 serialVersionUID 定义时的警告。 finally 任何 finally 子句不能正常完成时的警告。 all 关于以上所有情况的警告。 @SuppressWarnings 批注允许您选择性地取消特定代码段(即,类或方法)中的警告。其中的想法是当您看到警告时,您将调查它,如果您确定它不是问题,您就可以添加一个 @SuppressWarnings 批注,以使您不会再看到警告。虽然它听起来似乎会屏蔽潜在的错误,但实际上它将提高代码安全性,因为它将防止您对警告无动于衷 — 您看到的每一个警告都将值得注意。 下面是使用 @SuppressWarnings 来取消 deprecation 警告的一个例子: public class DeprecatedExample2 { @Deprecated public static void foo() { }}public class DeprecatedUser2 { @SuppressWarnings(value={"deprecation"})public static void main(String[] args) { DeprecatedExample2.foo(); }} @SuppressWarnings 批注接收一个 "value" 变量,该变量是一个字符串数组,它指示将取消的警告。合法字符串的集合随编译器而变化,但在 JDK 上,可以传递给 -Xlint 的是相同的关键字集合(非常方便)。并且要求编译器忽略任何它们不能识别的关键字,这在您使用一些不同的编译器时非常方便。 因为 @SuppressWarnings 批注仅接收一个参数,并为该参数使用了特殊的名称 "value",所以您可以选择省略 value=,作为一种方便的缩写: public class DeprecatedUser2 { @SuppressWarnings({"deprecation"})public static void main(String[] args) { DeprecatedExample2.foo(); }} 您可以将单个数组参数中的任意数量的字符串值传递给批注,并在任何级别上放置批注。例如,以下示例代码指示将取消整个类的 deprecation 警告,而仅在 main() 方法代码内取消 unchecked 和 fallthrough 警告: import java.util.*;@SuppressWarnings({"deprecation"})public class NonGenerics { @SuppressWarnings({"unchecked","fallthrough"})public static void main(String[] args) { Runtime.runFinalizersOnExit(); List list = new ArrayList(); list.add("foo"); } public static void foo() { List list = new ArrayList(); list.add("foo"); }} @SuppressWarnings 是否比前两个批注更有用?绝对是这样。不过,在 JDK 1.5.0 版本中还没有完全支持该批注,如果您用 1.5.0 来尝试它,那么它将类似无操作指令。调用 -Xlint:-deprecation 也没有任何效果。Sun 没有声明什么时候将增加支持,但它暗示这将在即将推出的一个 dot 版本中实现。 更进一步 如果您试图在 Javadocs 页面中查看这些属性,那么您可能很难找到它们。它们位于核心的 java.lang 包中,但有点隐蔽,它们出现在 Javadoc 类的最底端,列在 Exceptions 和 Errors 后面。 注意到了附加在 SuppressWarnings 批注后面的陌生的批注 @Target 和 @Retention 了吗?这些称为元数据批注,它们描述了该批注在哪里适用。我将在本系列的第二篇文章中介绍它们,以及介绍如何将元数据批注应用到您自己的批注中。
相关推荐
©️2020 CSDN 皮肤主题: 程序猿惹谁了 设计师:白松林 返回首页