基本 Annotation
跳到导航
跳到搜索
@Override 限定重写父类方法
@Deprecated 标示已过时
@SuppressWarnings 抑制编译器警告
@SafeVarargs 抑制“堆污染”警告
“堆污染”示例
import java.util.ArrayList;
import java.util.List;
public class Test3 {
/**
* @param args
*/
public static void main(String[] args) {
List list = new ArrayList<Integer>();
/*
* Type safety: The method add(Object) belongs to the raw type List.
* References to generic type List<E> should be parameterized
*/
list.add(20);
//把一个不带泛型的对象赋给一个带泛型的变量
List<String> ls = list;
//只要访问 ls 里的元素,如下面代码就会引起运行时异常
System.out.println(ls.get(0));
}
}
Exception in thread "main" java.lang.ClassCastException: class java.lang.Integer cannot be cast to class java.lang.String (java.lang.Integer and java.lang.String are in module java.base of loader 'bootstrap')
at zj.Test3.main(Test3.java:24)
Java 把引发这种错误的原因成为“堆污染”(Heap pollution)。
从 Java 7 开始,Java 编译器将会进行更严格的检查以避免发生可能的“堆污染”,但有些时候,开发者不希望看到这个警告,就可以使用 @SafeVarargs 修饰引发该警告的方法或构造器。