優先考慮類型安全的異構容器(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 轉換成子類

相關文章
相關標籤/搜索