Java 9新特性 - (3)@SafeVarargs注解支持私有方法

分享到:

Java 7 引入了@SafeVarargs注解来抑制当方法具有varargs(可变数量的参数)时出现的不安全操作警告,比如具有模糊类型(比如:泛型)的可变参数。@SafeVarargs注解只能用于无法覆盖的方法(final方法、static方法或构造函数),因为重写方法仍然可以对其 varargs(可变数量的参数)执行不安全操作。

Java 9 扩展了@SafeVarargs注解的使用,它现在也可以与私有方法一起使用。这是因为私有方法也是无法覆盖的。

Java 9 示例 - 当不使用@SafeVarargs注解时

 1import java.util.ArrayList;  
 2import java.util.List;  
 3public class JavaExample{  
 4    // We are not using @SafeVarargs annotation - Java 9
 5    private void print(List... names) {  
 6        for (List<String> name : names) {  
 7            System.out.println(name);  
 8        }  
 9    }  
10    public static void main(String[] args) {  
11        JavaExample obj = new JavaExample();  
12        List<String> list = new ArrayList<String>();  
13        list.add("Kevin");  
14        list.add("Rick"); 
15        list.add("Negan");
16        obj.print(list);  
17    }     
18}

编译时候,可以看到警告

1Type safety: Potential heap pollution via varargs parameter names
2Type safety: A generic array of List is created for a varargs 
3 parameter

在Java 9中,使用@SafeVarargs注解后再次运行相同的代码, 没有看到警告信息

 1import java.util.ArrayList;  
 2import java.util.List;  
 3public class JavaExample{  
 4    @SafeVarargs
 5    private void print(List... names) {  
 6        for (List<String> name : names) {  
 7            System.out.println(name);  
 8        }  
 9    }  
10    public static void main(String[] args) {  
11        JavaExample obj = new JavaExample();  
12        List<String> list = new ArrayList<String>();  
13        list.add("Kevin");  
14        list.add("Rick"); 
15        list.add("Negan");
16        obj.print(list);  
17    }      
18}

参考: