泛型學習筆記

_圖南發表於2021-11-05

泛型學習筆記

泛型的概念

允許在定義類、介面時通過一個標識表示類中某個屬性的類 型或者是某個方法的返回值及引數型別。這個型別引數將在使用時(例如, 繼承或實現這個介面,用這個型別宣告變數、建立物件時)確定(即傳入實 際的型別引數,也稱為型別實參)。

泛型的作用

1.解決元素儲存的安全性問題,好比商品、藥品標籤,不會弄錯。

2. 解決獲取資料元素時,需要型別強制轉換的問題,好比不用每回拿商品、藥 品都要辨別。

 

 

泛型主要解決了資料儲存時型別安全和資料讀取時型別強轉。

泛型的主要優點:是能夠在編譯時而不是在執行時檢測錯誤

自定義泛型

在建立類時在類後面用<T>,<E>等代替,在例項化時指明類的泛型資料型別如<String>,<Integer>

在類名後面指定型別引數的值(型別)。

如: List<String> strList = new ArrayList<String>();

Iterator<Customer> iterator = customers.iterator();

泛型T只能是類,不能用基本資料型別填充。但可以使用包裝類填充

 

泛型注意的細節:

1 泛型類可能有多個引數,此時應將多個引數一起放在尖括號內。比如: <E1,E2,E3>

2 泛型類的構造器如下:public GenericClass(){}。 而下面是錯誤的:public GenericClass()<E>{}

3.例項化後,操作原來泛型位置的結構必須與指定的泛型型別一致。

4.泛型不同的引用不能相互賦值。儘管在編譯時ArrayList和ArrayList是兩種型別,但是,在執行時只有 一個ArrayList被載入到JVM中。

5.泛型如果不指定,將被擦除,泛型對應的型別均按照Object處理,但不等價 於Object。經驗:泛型要使用一路都用。要不用,一路都不要用。

6.如果泛型結構是一個介面或抽象類,則不可建立泛型類的物件。

7 .jdk1.7,泛型的簡化操作:ArrayList flist = new ArrayList<>();

8.泛型的指定中不能使用基本資料型別,可以使用包裝類替換。

9.在類/介面上宣告的泛型,在本類或本介面中即代表某種型別,可以作為非靜態 屬性的型別、非靜態方法的引數型別、非靜態方法的返回值型別。但在靜態方法 中不能使用類的泛型。

泛型在物件的例項化的時候建立,靜態方法先於物件的建立。故靜態方法中不能使用類的泛型。

10.異常類不能是泛型的

11.不能使用new E[]。但是可以:E[] elements = (E[])new Object[capacity]; 參考:ArrayList原始碼中宣告:Object[] elementData,而非泛型引數型別陣列。

12父類有泛型,子類可以選擇保留泛型也可以選擇指定泛型型別:

 

 

 

相關文章