Java 9 - @safevarargs注释

时间:2020-02-23 14:34:55  来源:igfitidea点击:

在本教程中,我们将看到Java 9中的@safevarargs注释 @SafeVarargs是用于执行安全操作的注释。
当方法需要变量参数时,那么它可能会导致不安全操作,因此 @SafeVarargs注释告诉编译器执行安全操作。
例如,如果我们不使用注释编译器报告警告: Type safety: Potential heap pollution via varargs parameter

我们可以使用此注释 finalstaticprivate(来自Java 9)仅包含类的方法。
请参阅下面的示例。

@safevarargs注释

让我们看看有最终和静态方法的少数例子。

@safevarargs最终方法

在此示例中,我们具有var-args参数的最终方法,因此我们使用@safevarargs注释。
看到这个例子。

import java.util.ArrayList;
import java.util.List;
 
class DemoPrint{
    @SafeVarargs
    final void display(List<String>... lists) {
        for (List<String> list : lists) {  
            System.out.println(list);  
        }  
    }
}
class Main {
    public static void main(String[] args){
        DemoPrint dp = new DemoPrint();  
        List<String> list = new ArrayList<String>();  
        list.add("Python");  
        list.add("Java");  
        dp.display(list);
    }
}

输出

[Python, Java]

@safevarargs具有静态方法

Java允许使用 @SafeVarargs用静态方法注释。
请参阅下面的示例。

import java.util.ArrayList;
import java.util.List;
 
class DemoPrint{
    @SafeVarargs
    static void display(List<String>... lists) {
        for (List<String> list : lists) {  
            System.out.println(list);  
        }  
    }
}
class Main {
    public static void main(String[] args){
        List<String> list = new ArrayList<String>();  
        list.add("Python");  
        list.add("Java");  
        DemoPrint.display(list);
    }
}

输出

[Python, Java]

Java 9 @safevarargs改进

在Java 9中,它也可以使用@safevarargs注释以及私有方法。
其中我们有私有方法 displayString()带有字符串型var-args。

import java.util.ArrayList;
import java.util.List;
 
class DemoPrint{
    @SafeVarargs
    static void display(List<String>... lists) {
        for (List<String> list : lists) {  
            System.out.println(list);  
        }  
    }
}
class Main {
    @SafeVarargs
    private void displayString(String...strings ) {
        for (String str : strings) {
            System.out.println(str);
        }
    }
 
    public static void main(String[] args){
        List<String> list = new ArrayList<String>();  
        list.add("Python");  
        list.add("Java");  
        DemoPrint.display(list);
        Main main = new Main();
        main.displayString("Java","is","a","Awesome","Language");
    }
}

输出

[Python, Java]
Java
is
a
Awesome
Language

请注意,如果我们使用 @SafeVarargs在Java 9之前的私有方法,我们将获得编译错误。

没有@safevarargs注释

如果,我们不使用注释编译将向输出报告给控制台的警告消息。

class Main {
 
    private void displayString(String...strings ) {
        for (String str : strings) {
            System.out.println(str);
        }
    }
 
    public static void main(String[] args){
        Main main = new Main();
        main.displayString("Java","is","a","Awesome","Language");
    }
}

输出

Note: Main.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
Java
is
a
Awesome
Language