开源项目SDK:https://github.com/mingyang66/spring-parent
个人文档:https://mingyang66.github.io/raccoon-docs/#/
@SuppressWarnings是Java提供的一个注解(annotation),用于告诉编译器忽略特定的告警信息。这在某些情况下是非常有用的,特别是当你确定某个警告是安全的,或者是由第三方引起的且你也无法修改时。
一、@SuppressWarnings示例
protected static <T> void doGetEntityMap(final Field field, final T entity, final Object value) {
Map<Object, Object> dMap = (Map<Object, Object>) value;
for (Map.Entry<Object, Object> entry : dMap.entrySet()) {
Object key = entry.getKey();
Object v = entry.getValue();
}
上述示例代码将Object类型的value强制转换为Map类型,编译器会提示如下告警:
Unchecked cast: 'java.lang.Object' to 'java.util.Map<java.lang.Object,java.lang.Object>'
如果你确定value就是Map类型,则上述告警对代码具体执行无任何影响,如果不希望有这种告警信息出现在代码中,可以按如下代码处理:
protected static <T> void doGetEntityMap(final Field field, final T entity, final Object value) {
if (value instanceof Map) {
@SuppressWarnings("unchecked") // 显式告诉编译器我们知道这个转换是安全的
Map<Object, Object> dMap = (Map<Object, Object>) value;
for (Map.Entry<Object, Object> entry : dMap.entrySet()) {
Object key = entry.getKey();
Object v = entry.getValue();
}
}
首先判定value是Map类型,然后使用@SuppressWarnings(“unchecked”)注解告诉编译器忽略关于“未经检查的转换”的告警。但是,需要注意的是,这并不会解决潜在的类型安全为题,只是隐藏了警告。
二、@SuppressWarnings注解属性值
在Java中,@SuppressWarnings是一个元注解,用于指定编译器忽略指定的警告,value属性是一个字符串数组,它包含了一个或多个要忽略的警告名称。
如下是一些常见的警告名称:
unchecked
:当使用未经检查的原始类型时,例如当使用泛型时没有指定类型参数。deprecation
:当使用已废弃的类或方法时。rawtypes
:当使用原始类型而不是泛型类型时。serial
:当实现Serializable
接口的类没有定义serialVersionUID
时。unused
:当方法、变量或参数未被使用时。synthetic-access
:当使用桥接方法访问合成成员时。path
:当在类路径或模块路径上有问题时。unsafe-operations
:当使用某些不安全的操作时,例如对数组进行非安全的操作。null
:当使用可能产生空指针异常的代码时(自 Java 9 开始)。