个性化阅读
专注于IT技术分析

Java 9 @SafeVarargs注解

Java 9 @SafeVarargs注解

它是一个注释, 适用于采用varargs参数的方法或构造函数。它用于确保该方法不会对其varargs参数执行不安全的操作。

它已包含在Java7中, 并且只能应用于

  • 最终方法
  • 静态方法
  • 建设者

从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 
赞(0)
未经允许不得转载:srcmini » Java 9 @SafeVarargs注解

评论 抢沙发

评论前必须登录!