前言
@SafeVarargs 在 JDK7 中引入。
作用
是告诉编译器,在可变长参数中的泛型是类型安全的;
可变长参数是使用数组存储的,而数组和泛型不能很好的混合使用;
使用范围
@SafeVarargs 注解可以用于构造方法;
@SafeVarargs 注解可以用于 static 或 final 方法;
示例
public class SafeVarargsAnnotationDemo {
/**
* 此方法实际上并不安全,不使用此注解,编译时会告警
*/
@SafeVarargs
static void wrongMethod(List<String>... stringLists) {
Object[] array = stringLists;
List<Integer> tmpList = Arrays.asList(42);
array[0] = tmpList; // 语法错误,但是编译不告警
String s = stringLists[0].get(0); // 运行时报 ClassCastException
}
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
List<String> list2 = new ArrayList<>();
list.add("1");
list.add("2");
wrongMethod(list, list2);
}
}
上述示例如果不使用@SafeVarargs
,编译时会告警;
网友评论