1. 程式人生 > >java泛型知識點總結

java泛型知識點總結

1.泛型的基本應用
泛型可以解決資料型別的安全性問題,其主要原理是在類宣告時通過一個標識表示類中某個屬性的型別或者是某個方法的返回值及引數型別。
這樣在類宣告或者例項化時只要指定好需要的型別即可。
[訪問許可權] class 類名稱 <泛型型別標識1,泛型型別標識2,...,泛型型別標識3>{
[訪問許可權] 泛型型別標識 變數名稱;
[訪問許可權] 泛型型別標識 方法名稱(){};
[訪問許可權] 返回值型別宣告 方法名稱 (){泛型型別標識 變數名稱};
}

在泛型的指定中是無法指定基本資料型別的,必須設定成一個類,這樣在設定一個數字時就必須使用包裝類。
如果設定的內容與泛型所指定的型別不一致,則在編譯時會出錯。
加入泛型的最大好處實際上就是避免了類轉換異常(ClassCastException)的發生,這樣將使程式的操作更加安全。
2.泛型應用中的構造方法
構造方法可以為類中的屬性初始化,那麼如果類中的屬性通過泛型指定 ,而又需要通過構造設定屬性內容時,構造方法的定義與之前並無不同,不需要像宣告類那樣指定泛型。 
[訪問許可權] 構造方法 ([<泛型型別> 引數名稱]){
}
3.指定多個泛型型別
如果一個類中有多個屬性需要使用不同的泛型宣告,則可以在宣告類時指定多個泛型型別。
在泛型應用中最好在宣告類物件時指定好其內部的資料型別,如Info<String>,如果不指定型別,這樣在使用這樣的類時,就會出現不安全的警告資訊。
4.萬用字元
(1)匹配任意型別的萬用字元
萬用字元"?"表示可以接收此型別的任意泛型物件。
(2)受限泛型
在引用傳遞中,在泛型操作中也可以設定一個泛型物件的範圍上限和範圍下限。
範圍的上限使用extends關鍵字宣告,表示引數化的型別可能是所指定的型別或者是此型別的子類。
宣告物件: 類名稱 <? extends 類> 物件名稱
定義類:  [訪問許可權] 類名稱 <泛型標識 extends 類>{}
範圍下限使用super進行宣告,表示引數化的型別可能是所指定的型別,或者是此型別的父型別,或者是Obeject類。
宣告物件: 類名稱 <? super 類> 物件名稱
定義類:  [訪問許可權] 類名稱 <泛型標識 super 類>{}
5.泛型與子類繼承的限制
一個類的子類可以通過物件多型性為其父類例項化,但是在泛型操作中,子類的泛型型別是無法使用父類的泛型型別接收的。例如Info<String>不能使用Info<Object>接收。
如果將子類泛型變為父類泛型,則表示擴大了子類的內容。
6.泛型介面
[訪問許可權] interface 介面名稱<泛型標識>{
}
例子:   interface Info<T>{
public T getVar();
}
泛型介面實現的兩種實現方式
泛型介面定義完成之後,就要定義此介面的子類,定義泛型介面的子類有兩種方式,一種是直接在子類後宣告泛型,另一種是直接在子類實現的介面中明確的給出泛型型別。
在JDK1.5之後實際上很多的介面都加入了泛型的支援,這樣在使用這些介面時為了防止安全警告資訊的出現,都要指定具體的泛型型別。
7.泛型方法
(1)泛型方法的簡單定義
[訪問許可權] <泛型標識> 泛型標識 方法名稱 ([泛型標識 引數名稱])
例子: public <T> T get(T t){
return t;
 }
(2)如果泛型方法返回一個泛型的例項化物件,則必須在方法的返回型別宣告處明確的指定泛型標識
例子:public static <T extends Number> Info<T> get(){
Info<T> temp = new Info<T>();
return temp;
        }