“基本 Annotation”的版本间的差异
		
		
		
		
		
		跳到导航
		跳到搜索
		
				
		
		
	
Jihongchang(讨论 | 贡献)  | 
				Jihongchang(讨论 | 贡献)   | 
				||
| 第37行: | 第37行: | ||
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')  | 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)  | 	at zj.Test3.main(Test3.java:24)  | ||
| − | </syntaxhighlight>Java 把引发这种错误的原因成为“堆污染”(Heap   | + | </syntaxhighlight>Java 把引发这种错误的原因成为“堆污染”(Heap pollution)。  | 
| + | |||
| + | 从 Java 7 开始,Java 编译器将会进行更严格的检查以避免发生可能的“堆污染”,但有些时候,开发者不希望看到这个警告,就可以使用 @SafeVarargs 修饰引发该警告的方法或构造器。  | ||
2024年7月10日 (三) 10:02的最新版本
@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 修饰引发该警告的方法或构造器。