美文网首页
@SafeVarargs(随笔)

@SafeVarargs(随笔)

作者: 简楼 | 来源:发表于2021-04-16 21:15 被阅读0次

    前言

    @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);
        }
    }
    

    上述示例如果不使用@SafeVarargs,编译时会告警;

    相关文章

      网友评论

          本文标题:@SafeVarargs(随笔)

          本文链接:https://www.haomeiwen.com/subject/cohylltx.html