“基本 Annotation”的版本间的差异
跳到导航
跳到搜索
Jihongchang(讨论 | 贡献) 小 |
Jihongchang(讨论 | 贡献) |
||
(未显示同一用户的4个中间版本) | |||
第1行: | 第1行: | ||
@Override 限定重写父类方法 | @Override 限定重写父类方法 | ||
+ | |||
+ | @Deprecated 标示已过时 | ||
+ | |||
+ | @SuppressWarnings 抑制编译器警告 | ||
+ | |||
+ | @SafeVarargs 抑制“堆污染”警告 | ||
+ | |||
+ | === “堆污染”示例 === | ||
+ | <syntaxhighlight lang="java"> | ||
+ | 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)); | ||
+ | } | ||
+ | |||
+ | } | ||
+ | </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 修饰引发该警告的方法或构造器。