Java教程

Java9 @SafeVarargs批注

Java 9安全Varargs注释
它是一个注释,适用于采用 varargs参数的方法或构造函数。用来确保该方法不会对其varargs参数执行不安全的操作。
它已包含在Java7中,并且只能应用于
Final方法 Static方法 构造函数
从Java 9 起,它还可以与 私有实例方法一起使用。
注意: @SafeVarargs批注只能应用于无法覆盖的方法。应用于其他方法将引发编译时错误。
让我们看一些示例,在第一个示例中,我们没有使用@SafeVarargs批注和编译代码。走着瞧吧?

Java 9 @SafeVarargs注释示例

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表示法,就像在下面的示例中所做的那样。

Java 9 @SafeVarargs注释示例

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或更高版本来编译代码。
会发生什么?如果我们使用旧版Java编译以下代码。

Java @SafeVarargs注释示例

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

昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4