Java 9 - @safevarargs注释
时间:2020-02-23 14:34:55 来源:igfitidea点击:
在本教程中,我们将看到Java 9中的@safevarargs注释 @SafeVarargs是用于执行安全操作的注释。
当方法需要变量参数时,那么它可能会导致不安全操作,因此 @SafeVarargs注释告诉编译器执行安全操作。
例如,如果我们不使用注释编译器报告警告: Type safety: Potential heap pollution via varargs parameter。
我们可以使用此注释 final和 static和 private(来自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

