Java9 @SafeVarargs注解
1 Java9 @SafeVarargs注解的介绍
@SafeVarargs注解适用于采用varargs参数的方法或构造函数。它用于确保该方法不会对其varargs参数执行不安全的操作。
它已包含在Java7中,只能应用于
- 最终方法
- 静态方法
- 构造方法
从Java 9开始,它也可以与私有实例方法一起使用。
注意: @SafeVarargs批注只能应用于无法覆盖的方法。应用到其他方法将引发编译时错误。
让我们看一些示例,在第一个示例中,我们没有使用@SafeVarargs批注和编译代码。
2 Java9 @SafeVarargs注解的案例1
/**
* 一点教程网: http://www.yiidian.com
*/
import java.util.ArrayList;
import java.util.List;
public class SafeVar{
private void display(List<String>... products) { // Not using @SaveVarargs
for (List<String> product : products) {
System.out.println(product);
}
}
public static void main(String[] args) {
SafeVar p = new SafeVar();
List<String> list = new ArrayList<String>();
list.add("Laptop");
list.add("Tablet");
p.display(list);
}
}
它在编译时生成警告消息,但编译时没有错误。
输出结果为:
At compile time:
Note: SafeVar.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
At runtime:
[Laptop, Tablet]
这是由编译器生成的有关不安全varargs类型的警告。
为了避免这种情况,我们应该对方法使用@SaveVarargs表示法,就像在下面的示例中所做的那样。
3 Java9 @SafeVarargs注解的案例2
/**
* 一点教程网: http://www.yiidian.com
*/
import java.util.ArrayList;
import java.util.List;
public class SafeVar{
// Applying @SaveVarargs annotation
@SafeVarargs
private void display(List<String>... products) { // Not using @SaveVarargs
for (List<String> product : products) {
System.out.println(product);
}
}
public static void main(String[] args) {
SafeVar p = new SafeVar();
List<String> list = new ArrayList<String>();
list.add("Laptop");
list.add("Tablet");
p.display(list);
}
}
现在,编译器不会产生警告消息,代码可以编译并成功运行。
输出结果为:
[Laptop, Tablet]
注意:要将@SaveVarargs注释应用于私有实例方法,请仅使用Java 9或更高版本来编译代码。
4 Java9 @SafeVarargs注解的案例3
/**
* 一点教程网: http://www.yiidian.com
*/
import java.util.ArrayList;
import java.util.List;
public class SafeVar{
@SafeVarargs
private void display(List<String>... products) {
for (List<String> product : products) {
System.out.println(product);
}
}
public static void main(String[] args) {
SafeVar v = new SafeVar();
List<String> list = new ArrayList<String>();
list.add("Laptop");
list.add("Tablet");
v.display(list);
}
}
输出结果为:
SafeVar.java:6: error: Invalid SafeVarargs annotation. Instance method display(List<String>...) is not final.
private void display(List<String>... products) {
^
Note: SafeVar.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
1 error
热门文章
优秀文章