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

 

热门文章

优秀文章