“基本 Annotation”的版本间的差异

来自姬鸿昌的知识库
跳到导航 跳到搜索
 
(未显示同一用户的2个中间版本)
第34行: 第34行:
  
 
}
 
}
</syntaxhighlight>
+
</syntaxhighlight><syntaxhighlight lang="console">
 +
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)
 +
</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 修饰引发该警告的方法或构造器。