美文网首页
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

    相关文章

      网友评论

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

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