
泛型数组 @safevarargs 的应用
在 java 中,@safevarargs 注解用于确保 varargs 参数的安全访问。您想使用它来创建泛型数组,但遇到了错误。让我们深入了解@safevarargs 的工作原理以及如何正确使用它。
@safevarargs 通过检查 varargs 参数是否与您声明的数组类型兼容来保证安全性。然而,在给定的代码中:@safevarargs 注解应用于 asarray 方法,但错误发生在 picktwo 方法中。问题在于这两个方法都返回数组,但它们的类型不同。
asarray 方法声明为
立即学习“Java免费学习笔记(深入)”;
因此,编译器不能推断出 asarray 中声明的 t 类型与 picktwo 中声明的 k 类型相同。这就导致了类转换异常,将 picktwo 方法返回的 object 数组强制转换为 string 数组。
为了解决这个问题,需要将两种方法的返回值类型保持一致。您可以通过将 aslist 用作返回值来实现这一点,因为 list 是一个通用的接口,可以存储任何类型的元素。
更新后的代码如下:
import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
List arr = asList("one", "two", "three");
System.out.println(arr);
List firstTwo = pickTwo("one", "two", "three");
System.out.println(firstTwo);
}
static List pickTwo(K k1, K k2, K k3) {
return asList(k1, k2);
}
@SafeVarargs
static List asList(T... objs) {
return Arrays.asList(objs);
}
}










