泛型可以建立獨立於被包含型別的類和方法
效能、型別的安全性、二進位制**重用、**的拓展、命名約定
6.1.1 效能
var list = newarraylist();
list.add(
4); //
裝箱int il = (int) list [0]; //
拆箱var list = new list();
list.add(
44); //
不用裝箱
int il = list[0]; //
不用拆箱
arraylist類儲存物件,把物件作為引數,需要大量裝箱和拆箱。
list類不使用物件,而是在使用時定義型別,定義的型別在jit編譯器動態生成的類中使用,不再進行裝箱和拆箱操作
6.1.2 型別安全
arraylist可以add任意型別,foreach遍歷int型別時遇到不是int就會異常。
list泛型型別t定義了允許使用的型別
6.1.3 二進位制**的重用
泛型型別可以定義一次,可以用許多不用的型別例項化
var list = new list();var stringlist = new list();
var myclasslist = new list();
6.1.4 **的拓展
在不同的特定型別例項化泛型時,會建立多少**?因為泛型類的定義會放在程式集中,所以用特定型別例項化泛型類不會在il**中賦值這些類。但是,在jit編譯器把泛型類編譯為本地**時,會給每個值型別建立乙個新類。引用型別共享同乙個本地類的所有相同的實現**。這是因為引用型別在例項化的泛型類中只需要4個位元組的記憶體位址(32位系統),就可以引用乙個引用型別。值型別包含在例項化的泛型類的記憶體中,同時因為每個值型別對記憶體的要求都不通,所以要為每個值型別例項化乙個新類。
(看不懂)
6.1.5 命名約定
泛型型別的名稱用字母t作為字首 public
class list()
如果沒有特殊的要求,泛型型別允許用任意類替代,且只使用了乙個泛型型別,就可以用字元t作為泛型型別的名稱 public
class linkedlist
如果泛型型別有特定的要求(例如,它必須實現乙個介面或派生自基類,或者使用了兩個或多個泛型型別),就應該給泛型型別使用描述性的名稱
publicclass sortedlist()
6.2 建立泛型類
每個處理物件型別的類都可以有泛型實現方式,這樣有利於消除型別強制轉換操作
6.3 泛型類的功能
第9章 泛型
增加了泛型支援後的集合,完全可以記住集合中元素的型別,並可以在編譯時檢查集合中元素的型別,如果試圖向集合中新增不滿足型別要求的物件,編譯器就會提示錯誤。建立的方法是 在集合介面 類後增加尖括號,尖括號裡放乙個資料型別,如 liststr new arraylist 對於後面的 系統會自動識別為str...
第12章 泛型
泛型字母 形式型別引數 formal type parameters 即泛型字母 命名 泛型字母可以隨意指定,盡量使用單個的大寫字母 有時候多個泛型型別時會加上數字,比如t1,t2 常見字母 見名知意 t type k v key value e element 需求 定義學生類,其中有學生成績 整...
第12章 泛型
publicstaticvoidmain string args 1 泛型沒有多型 如果b是a的乙個子型別 子類或者子介面 而g是具有泛型宣告的類或介面,g並不是g的子型別!比如 string是object的子類,但是list並不是list的子類。2 沒有泛型陣列 public class test...