版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lastsweetop/article/details/82863417
当使用泛型作为可变参数时,因为可变参数是数组类型,在编译之后泛型会被擦出掉,那么传入参数就成了unchecked的警告:
如下例子
public class VarargsWaring { private static List<String> useVarargs(List<String>... args) { return args.length > 0 ? args[0] : null; } public static void main(String[] args) { List<String> list = new ArrayList<>(); System.out.println(VarargsWaring.useVarargs(list)); } }
像我们开始讲的那样,类型是会经过擦除,如果代码改成
public class VarargsWaring { private static List<String> useVarargs(List<String>... args) { return args.length > 0 ? args[0] : null; } public static void main(String[] args) { List list = new ArrayList<Integer>(); System.out.println(VarargsWaring.useVarargs(list)); } }
依然可以编译通过,如果方法里进一步对String进行操作,那么就会报运行时异常。
在此编译器给出警告,如果你非常确认你所有的调用都没有类型未检查的错误,那么你可以使用 SafeVarargs
来忽略此警告
public class VarargsWaring { @SafeVarargs private static List<String> useVarargs(List<String>... args) { return args.length > 0 ? args[0] : null; } public static void main(String[] args) { List list = new ArrayList<String>(); System.out.println(VarargsWaring.useVarargs(list)); } }