@SuppressWarnings注解详解

本文将从回答三个问题来了解@SuppressWarnings注解

1. 是什么?@SuppressWarnings注释是什么?

使用@SuppressWarnings注释来取消Java编译器发出的警告。

2. 为什么?为什么使用@SuppressWarnings注解?

编译器警告消息通常很有帮助。但是,有时警告会变得嘈杂。特别是当我们无法或不想解决它们时,编译器将发出有关此方法的警告。如果我们不想解决该警告,则可以使用@SuppressWarnings注释将其取消。

3. 怎么用?如何使用@SuppressWarnings注解?

@SuppressWarnings注解可选的参数有以下:

  1. rawtypes 使用原始数据类型
  2. unchecked 未经检查
  3. serial 未添加序列化字段
  4. deprecated 被废弃

用法实例:

  1. 添加单个参数
@SuppressWarnings("unchecked")
  1. 添加参数列表
@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

原文地址:https://www.cnblogs.com/zhangnianlei/p/12239239.html