java @SafeVarargs

阅读数:41 评论数:0

跳转到新版页面

分类

python/Java

正文

一、概述

@SafeVarargs 在 JDK7 中引入,是告诉编译器,在可变长参数中的泛型是类型安全的;
可变长参数是使用数组存储的,而数组和泛型不能很好的混合使用;

@SafeVarargs 注解可以用于构造方法;
@SafeVarargs 注解可以用于 static 或 final 方法;

二、示例

public class SafeVarargsAnnotationDemo {
    /**
     * 此方法实际上并不安全,不使用此注解,编译时会告警
     */
    @SafeVarargs
    static void wrongMethod(List<String>... stringLists) {
        Object[] array = stringLists;
        List<Integer> tmpList = Arrays.asList(42);
        array[0] = tmpList; // 语法错误,但是编译不告警
        String s = stringLists[0].get(0); // 运行时报 ClassCastException
    }

    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("A");
        list.add("B");

        List<String> list2 = new ArrayList<>();
        list.add("1");
        list.add("2");

        wrongMethod(list, list2);
    }
}



相关推荐