@SuppressWarnings注解详解

mac2022-06-30  22

本文将从回答三个问题来了解@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

最新回复(0)