Effective Java(四) 泛型
泛型
Tip-23 請不要在新程式碼中使用原生態型別
java1.5 版本後 就不要使用 List 而是 使用 List<String> 這種 帶泛型的集合
如果使用原來的集合型別,就失掉了泛型在安全性和表述型方面的所有優勢
原生的List 和 List<Object> 是不同的 List<Object> 並沒有丟掉安全性
假如不確定或不關心實際的型別引數,就可以使用一個問號代理 此乃 無限制萬用字元型別List<?>
加入比對兩個集合中的共同元素的數量-使用無限制萬用字元
static int numElementsInCommon(Set<?> s1,Set<?> s2){
int result = 0 ;
for(Object 01 : s1){
if(s2.contains(o1)){
result++;
}
}
return result;
}
- 不要在新程式碼中使用原生態型別,這條規則有兩個小小的例外,兩者都源於“泛型資訊可以在執行時被擦除”這一事實。
- 在類文字中必須使用原生態型別。換句話說 List.class String[].class 和 int.class 都合法,但是List<String>.class 和 List<?>.class 則不合法
- 由於泛型資訊可以在執行時刪除,因此在引數化型別而非無限制萬用字元上使用instanceof操作符是非法的。
- 用無限制萬用字元型別代替原生態型別,對instanceof 操作符的行為不會產生影響。
Tip-24 消除非受檢警告
- 用泛型程式設計時,會遇到許多編譯警告:非受檢強制轉化警告,非受檢方法呼叫警告,非受檢普通陣列建立警告,以及非受檢轉換警告
- 要儘可能消除一切非受檢警告,如果消除了所有警告,就可以確保程式碼是型別安全的
Tip-25 列表優先於陣列
- 陣列於泛型相比,有兩個重要的不同點。首先,陣列是協變的,泛型是不可變的
- 第二大區別,陣列是具體化的。
- 陣列提供了執行時的型別安全,但是沒有編譯時的型別安全,
- 如果你發現自己將他們混合起來使用,並且得到了編譯時錯誤或者警告,你的第一反應是用列表代替陣列
Tip-26 優先考慮泛型
- 看不懂啊
Tip-27 優先考慮泛型方法
- 靜態工具方法尤其適合於泛型化
- 泛型化帶來型別安全
- 泛型方法就像泛型一樣,使用起來比要求客戶端轉換輸入引數並返回值得方法來得更加安全,也更加容易。
Tip-28 利用有限制萬用字元來提升API的靈活性
- java提供了一種特殊的引數化型別,稱作有限制的萬用字元型別<? Extends E>
- <? Extends E> 和 <? super E> 逆變和協變
- PECS 表示 Producer-extends Consumer-super
- 方法的引數是協變位置,返回值是逆變位置。
- 要從泛型類取資料時,用extends;
- 要往泛型類寫資料時,用super;
- 既要取又要寫,就不用萬用字元(即extends與super都不用)。
Tip-29 優先考慮型別安全的異構容器
- 看不懂
不在更新Effective 系列 很多東西都是一種感覺 並且多數知識是積累性質的,並沒有在實際開發中使用,在寫的新的一章時發現很多知識不應用就會遺忘,而且簡單的筆記也沒有實質性的幫助,所以永久性停更此係列,以後的文章應該聚焦細節,和實際生產環境的問題。書繼續讀,文章到此處,說不定二讀,三讀,會繼續寫下去。。。。
相關文章
- 泛型(四)泛型
- 【java】【泛型】泛型geneticJava泛型
- java泛型之泛型方法。Java泛型
- Java基礎知識掃盲(四)——泛型Java泛型
- Java泛型知識點:泛型類、泛型介面和泛型方法Java泛型
- java泛型之泛型陣列。Java泛型陣列
- Java 泛型Java泛型
- Java泛型Java泛型
- Java 泛型原理Java泛型
- Java+泛型Java泛型
- java泛型一二Java泛型
- Java(7)泛型Java泛型
- Java-泛型Java泛型
- java泛型剖析Java泛型
- JAVA泛型類Java泛型
- Effective Java讀書筆記七:泛型(23-29 部分章節需要重讀)Java筆記泛型
- Java™ 教程(泛型原始型別)Java泛型型別
- Java泛型與型別擦除Java泛型型別
- 淺談java泛型Java泛型
- java 基礎 泛型Java泛型
- Java:Collection集合、泛型Java泛型
- Java泛型知識Java泛型
- Java泛型複習Java泛型
- 認識Java泛型Java泛型
- Java 泛型詳解Java泛型
- Java泛型筆記Java泛型筆記
- Java基礎-泛型Java泛型
- JAVA泛型入門Java泛型
- Java泛型詳解Java泛型
- Java集合和泛型Java泛型
- 【Java基礎】泛型Java泛型
- Java 泛型 1例Java泛型
- java 泛型陣列Java泛型陣列
- JAVA泛型淺析Java泛型
- Java中的泛型Java泛型
- Java函式泛型List引數,操作泛型元素Java函式泛型
- JAVA泛型使用練習2(自定義泛型使用)Java泛型
- 【Java反射】Java 泛型基礎Java反射泛型