本文将从回答三个问题来了解@SuppressWarnings注解
1. 是什么?@SuppressWarnings注释是什么?
使用@SuppressWarnings注释来取消Java编译器发出的警告。
2. 为什么?为什么使用@SuppressWarnings注解?
编译器警告消息通常很有帮助。但是,有时警告会变得嘈杂。特别是当我们无法或不想解决它们时,编译器将发出有关此方法的警告。如果我们不想解决该警告,则可以使用@SuppressWarnings注释将其取消。
3. 怎么用?如何使用@SuppressWarnings注解?
@SuppressWarnings注解可选的参数有以下:
- rawtypes 使用原始数据类型
- unchecked 未经检查
- serial 未添加序列化字段
- deprecated 被废弃
用法实例:
- 添加单个参数
@SuppressWarnings("unchecked")
- 添加参数列表
@SuppressWarnings({ "unchecked", "rawtypes" })
可选参数详解:
rawtypes
正在使用原始类型
List、Set、Map是Java中的原始数据类型,Java 5出现泛型,现已不推荐使用原始类型,更推荐使用泛型例如:List<?>、Set<?>、Map<?>,原因以下:
- 使用原始数据类型从集合中读取到的每一个对象都必须进行转换,如果有人不小心插入了类型错误的对象,在运行时转换就会出错。
- 使用泛型可以告诉编译器每个集合中接受哪些对象类型,编译器自动为插入进行转换,并在编译时告知是否插入错误类型的对象
- 使用泛型的优点:使程序更安全,更清楚。
虽然是不推荐但是任然还是可以使用原始类型,如果有十足的把握不出错,那我们可以在使用原始类型的时候添加@SuppressWarnings(“rawtypes”)来让程序在编译时不发出警告。
public class RawType{
public static void main(String args[]){
@SuppressWarnings("rawtypes")
List names = new ArrayList();
}
}
unchecked
没有进行类型检查
使用原始数据类型的一个缺陷就是不会进行类型检查,Java编译器会抛出没有进行类型检查的错误,此时我们可以使用@SuppressWarnings(“unchecked”)来取消警告
serial
对于一个实现了Serializable接口的类,如果没有声明SerializableSID则该类也会在编译时发出警告
可使用@SuppressWarnings(“serial”)取消该警告
@SuppressWarnings("serial")
public class Test implements Serializable{
private String version;
public String getVersion(){ return version };
}
deprecated
如果使用了被Java编辑为废弃的方法或类时,可以使用@SuppressWarnings(“deprecated”)来取消警告
总结
本文的主要内容:
- 当我们觉得编译器的警告无用且多与时我们可以使用@SuppressWarnings注解来取消Java编译器的警告
- @SuppressWarnings注解的可选参数有rawtype 使用原生类型、unchecked 使用未经检查的转换、serial 未添加序列化字段、deprecated 使用废弃方法
参考:
https://www.baeldung.com/java-suppresswarnings
https://docs.oracle.com/javase/7/docs/api/java/lang/class-use/SuppressWarnings.html