一.前言
相信大家都有遇到下面这种情况

又是灰色又是波浪线的,而且还一直提示警告
那么我们有没有什么方法可以屏蔽他吗?
当然有啊~下面我们就来了解一下
仅因为这类教程太少,而且大多数都不是针对IDEA的,所以我才放出来,有大佬的话不要喷我啦
开始本教程之前,我在这里默认您会Java(至少要学完面向对象,并了解注解)
不要过度使用抑制警告,遇到警告能处理就尽量处理,仅当您确定您的代码绝对不会出现问题,警告是多余的时候,才应该使用警告抑制
我也不知道我文章应该发表到哪里去,那就只好在B站发了啦
下文中的快捷键可能会因为IDEA设置有所不同
二. @SuppressWarnings (使用注解抑制警告 推荐)
@SuppressWarnings(String[] value)是Java自带的一个注解 Java1.5被创建 位于 java.lang 包下 其@Target注解如下
@Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE}) 也就是说,几乎所有符号(类、成员变量、方法、参数、构造方法、局部变量)都支持该注解
其@Retention注解如下
@Retention(RetentionPolicy.SOURCE) 意味着这个注解指挥存在于代码中,不仅不会在运行时保留,甚至编译时会被直接丢弃
其有一个方法(参数)value——类型是String数组,该参数的介绍如下
The set of warnings that are to be suppressed by the compiler in the annotated element. Duplicate names are permitted. The second and successive occurrences of a name are ignored. The presence of unrecognized warning names is not an error: Compilers must ignore any warning names they do not recognize. They are, however, free to emit a warning if an annotation contains an unrecognized warning name. The string "unchecked" is used to suppress unchecked warnings. Compiler vendors should document the additional warning names they support in conjunction with this annotation type. They are encouraged to cooperate to ensure that the same names work across multiple compilers. Returns: the set of warnings to be suppressed
我才不是不会翻译呢,我只是懒得翻译
也就是说,这个参数填的是我们要抑制的警告类型(to set of warnings to be suppressed)
IDEA和其他IDE(例如Eclipse)的很多参数都不一样,那么我们应该如何填这个字符串呢?
附上一个非常简单的方法:

使用IDEA提示来抑制警告
IDEA还是很人性化的呀,我们只需要把输入标放在这个警告上,按下Alt+Enter,选择想要抑制的警告信息或其快速修复选项,然后按→方向键,就能看到这个提示啦,接着我们可以继续按方向键来控制选择
我们可以看到,我们有5种方法可以抑制警告(在不同的情况下提供的选项数量都不同)我们选择任何一个选项,都可以直接抑制该警告,只是作用域不同

各种不同的抑制警告方式
我想说的都写上面注释里了
怎么样,是不是看起来舒服多了呢(明明看起来更乱了好嘛)
2333...确实更乱了,所以说不要过度使用警告抑制
这里要解释一下这个“以注释的方法”抑制警告,这是一个IDEA独有的抑制警告的方法,它的作用和单行注解抑制警告是一样的,但是不同的是,由于Java语法限制,@SuppressWarnings它只有在声明(类、成员变量、成员方法、参数、构造方法、局部变量等)时才可以打上,一条普通的非声明语句只能使用注释的方式抑制警告
由于检查太多了,这里就不列举参数内容了
有一个特例:内容为“all”时是抑制所有警告
三. 临时关闭警告/错误
我们可以看到,IDEA代码块右上角(部分调了设置的用户可能在其他地方),可以直接显示当前警告和错误的数量

我们把光标悬停在上面,会出现一个选项

鼠标悬停在上方的选项
我们拉开选项,里面又有3个选项,可以选择高亮哪些内容(隐藏全部,仅显示错误,显示错误和警告)
不太推荐此做法,因为这个做法会让当前这个选项卡的所有警告或错误都不再高亮显示,容易忽略掉一些真正的问题
四. 修改IDEA设置
有时候的警告是没有意义的 就比如说下面这种情况

这是为什么呢?明明很正常的代码啊?为什么有枚举类就会警告呢?小编也觉得很惊讶啊 但事实就是如此,不知大家有什么看法呢,欢迎在评论区里留言哦
对于这种问题,我们可以直接Ctrl+F1就可以查看其原因(如果没有出现,那就再按一次Ctrl+F1)

使用Ctrl+F1查看警告原因
原来是因为Java 1.4以下是不支持enum的,IDEA就警告我们,如果要在Java 1.4以下环境运行的话,那就不可以使用enum
当然,现在谁还用远古版本Java呢?所以这种类似的警告是多余的,我们可以选择永久性将其关闭
我们单击 File -> Settings...(可以直接使用快捷键Ctrl+Alt+S,不过这个快捷键很可能已经被QQ占用了就是了)
接着我们依次打开Editor -> Inspections 然后搜索我们刚刚的警告 "Enumerated class"

就可以对该警告进行设置啦
如果不需要这种警告,取消勾选即可
如果想让它安静点,但还是提醒,直接选择Weak Warnning(例如up主就喜欢把unused设置成弱警告)
如果该问题会严重影响程序运行,甚至可以选择Error
那么有人现在可能要问了“啊,怎么这么多,我找不到怎么办啊”
对于这种情况,我们的IDEA好像还有一种快捷选项哦
我们对着警告的代码,按下Alt+Enter,上下翻选中警告选项或快速修复选项,再按→方向键

我们选择第一个 "Edit inspection profile setting",就能直接找到该警告对应的检查

怎么样 是不是很简单呢
五. 最后
还是那句话:我们看到警告,最先应该想到的是,我们该如何去处理它,就像异常一样,不应该一直想着怎么去屏蔽它,只有当你确定了这个警告是无意义的,才应该抑制或关闭
(就像我,打开了全部警告,随便写个注解都报警告,随便写个枚举类也报警告,这种情况才应该将警告关闭)
(一个警告告诉我,这个局部变量应该被final修饰,我加上final后,IDEA又提示我这个final修饰符是多余的,我再删掉final,它又提示我这个局部变量应该被final修饰 (我太难了) 这时候 我们应该把警告关掉)
再比如说,我们通过反射修改了一个变量的值,当我们想要调用这个值的时候,IDEA却告诉我们“这个值是null,现在调用可是会空指针的”,但是我们已经用反射给它赋过值了,这时候我们才应该抑制该警告
写这篇文章太不容易了qwq 希望得到大家的支持哦~