美文网首页
Effective Java - 谨慎地结合泛型和可变参数

Effective Java - 谨慎地结合泛型和可变参数

作者: DZQANN | 来源:发表于2022-06-21 21:52 被阅读0次
  1. 把一个值保存在泛型的可变参数数列中是不安全的
  2. 在Java 7之前, 对泛型可变参数的警告只能在客户端通过@SuppressWarnings("unchecked")来消除,
    Java 7加上了SafeVarargs注解,方法的作者用来承诺安全性
  3. 可以使用SafeVarargs注解标记方法参数安全的情形
    • 没有在可变参数数组中保存任何值
    • 没有对不信任的代码开放该数组
  4. 对于任何带有泛型可变参数或者参数化类型的方法,都要使用SafeVarargs注解
  5. Java8中SafeVarargs注解只能在静态方法和final方法中使用,Java9中可以在私有实例方法上使用
  6. 还有一种选择是使用List代替可变参数

思考

  1. 如果只是读取使用可变参数数组的值,并且不会对方法外暴露这个数组,则可以认为是参数安全的
  2. 使用List代替可变参数固然更好,但是缺陷是调用的时候会更不方便。Java9之后,才有了官方的List.of方法,在此之前可能都要使用Guava。而且感觉test(1, 2, 3)test(List.of(1, 2, 3))看起来更加的优雅
  3. TMS中用到可变参数的地方有很多,大多数不是泛型类。泛型类的地方只有一个方法使用了SafeVarargs注解,这个方法的功能是一个List<Office>数组,拿到第一个不为空的Office,返回Company Code

相关文章

  • Swift Founction 和 Closures

    可变参数数量和参数泛型约束 可以使用 ..., 来设置可变参数数量 使用 where 约束泛型实现特定的协议 方法...

  • JavaSE基础知识学习-----泛型

    泛型 Java泛型是jdk1.5的一个新特性,jdk的性特性还包括:泛型,枚举,装箱和拆箱,可变参数等。这里先主要...

  • java——中泛型的应用

    在解释泛型的时候先说下java中的可变参数的定义和应用。定义:参数的类型... 参数名称示例: package c...

  • Java泛型教程

    Java泛型教程导航 Java 泛型概述 Java泛型环境设置 Java泛型通用类 Java泛型类型参数命名约定 ...

  • java泛型中类型擦除的一些思考

    java泛型 java泛型介绍 java泛型的参数只可以代表类,不能代表个别对象。由于java泛型的类型参数之实际...

  • JDK5的新特性

    可变参数 格式: 注意 静态导入 泛型 泛型类: 泛型方法: 泛型接口: 增强for 在 集合_List 中有...

  • Java逆变与协变

    引子 《Effective Java》中第25条中《列表优于数组》中提到数组是协变的,相反泛型是不可变的 其实用于...

  • Java 泛型

    泛型类 例如 泛型接口 例如 泛型通配符 泛型方法 类中的泛型方法 泛型方法与可变参数 静态方法与泛型 泛型上下边...

  • java泛型

    java泛型 Java 泛型的参数只可以代表类,不能代表个别对象。 由于 Java 泛型的类型参数之实际类型在编译...

  • JAVA 核心笔记 || [xxx] 泛型

    泛型 JAVA 的参数化类型 称为 泛型 泛型类的设计 Learn12.java 运行

网友评论

      本文标题:Effective Java - 谨慎地结合泛型和可变参数

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