优先考虑类型安全的异构容器(29)

一、泛型经常使用于集合(Set、Map)以及单元素容器(ThreadLocal、AtomicReference)安全

  • 被参数化的容器:只能有固定数目的类型参数

二、Class 类在jdk 1.5 以后被泛型化了3d

  • String.class 属于Class<String> 类
  • 下述,追求更加灵活:将key 参数化,不是整个容器

  • Favorites 就是类型安全的异构容器
  • 通配符类型是嵌套的,Class<?> 在存入map 时被Class<String>等替换掉,所以能够存储
  • map的value 是Object ,所以与key 的类型不能保证匹配
  • getFavorite 方法,使用 T 作返回类型,须要类型动态转换,保证了key 与 value 的联系
  • 这里的 cast 仅仅验证参数是不是class对象所表示类型的实例(若是结果不对,抛出ClassCastException)

Favorites 类存在两种局限性对象

  • 其一:恶意的客户端能够很容易破坏类型安全,只要以原生态形式使用class对象(擦除的缘由)
  • put 的时候加一个强制转换便可

  • 其二,不能用在不可具体化类型中
  • 不能够保存 List<String>  ,由于List<String>.class不合法(合法的是:List.class)
  • 以下,类 Class 提供了一种安全执行类型转换方法asSubClass 转换成子类

相关文章
相关标签/搜索