【Java 泛型】泛型简介 ( 泛型类 | 泛型方法 | 静态方法的泛型 | 泛型类与泛型方法完整示例 )
文章目錄
- 一、泛型簡(jiǎn)介
- 二、泛型類
- 三、泛型方法
- 四、靜態(tài)方法的泛型
- 五、泛型類與泛型方法完整示例
一、泛型簡(jiǎn)介
泛型 可以 簡(jiǎn)單理解為 參數(shù)化類型 , 主要作用在 類 , 方法 , 接口 上 ;
java 泛型 與 C++ 模板 : Java 中的泛型 , 是仿照 C++ 中的 模板 開發(fā)的 , 目的是讓開發(fā)者可以寫出 通用 , 靈活 的代碼 ;
偽泛型 : Java 中的泛型 , 是 偽泛型 , Java 泛型開發(fā)好之后 , 在 編譯階段 就 將泛型相關(guān)的信息消除 了 , 不會(huì)泛型留到運(yùn)行時(shí) ;
泛型類型 :
- 泛型方法 : 方法有參數(shù) , 方法的參數(shù) 可以指定成一些 泛型 ;
- 泛型類 : 類 也可以有參數(shù) , 將 類型 作為 參數(shù) 傳入類中 ;
- 泛型接口 : 接口 的 參數(shù) , 也可以是泛型 ;
將 類型 傳入 泛型方法 , 泛型類 , 泛型接口 中 , 可以 動(dòng)態(tài)地 指定一些類型 ;
泛型的作用 :
- 安全檢查 : 在 編譯階段 , 就可以進(jìn)行 代碼檢查 , 將更少的錯(cuò)誤帶到運(yùn)行時(shí) ;
- 避免強(qiáng)轉(zhuǎn) : 避免 類型的強(qiáng)轉(zhuǎn) 導(dǎo)致不必要的安全問(wèn)題 ;
- 提高性能 : 使用泛型可以 提高 Java 的性能 ;
二、泛型類
泛型類 : 在 類名后面 使用 <T> 聲明泛型 , 則在該類中 , 可以使用該泛型類型 T 類型 ;
特別注意 , 該類中的 如下 222 個(gè)方法 不是 泛型方法 ; 其中的 參數(shù) , 返回值 類型是 T , 但 這個(gè) T 是作為一個(gè)正常的類型使用的 , 并不是聲明在 方法 中的泛型 ;
如果 類 , 接口 , 方法 是 泛型類 , 泛型接口 , 泛型方法 , 則該 類 , 接口 , 方法 必須由 <T> 修飾 , 有個(gè)帶尖括號(hào)的 T ;
public T getData() {return data;}public void setData(T data) {this.data = data;}泛型類完整代碼示例 :
/*** 泛型類* 該 T 類型作為參數(shù)使用* T 是參數(shù)化類型 , 可以由外部傳入** @param <T>*/ public class Student<T> {private String name;private int age;/*** 該數(shù)據(jù)的類型未知* 使用泛型表示 , 運(yùn)行時(shí)確定該類型*/private T data;public Student(String name, int age, T data) {this.name = name;this.age = age;this.data = data;}/*** 該方法不是泛型方法* 該方法是普通方法 , 返回值類型是 T 類型* @return*/public T getData() {return data;}public void setData(T data) {this.data = data;} }三、泛型方法
泛型方法 : 在方法的 返回值前 , 使用 <T> 聲明泛型的方法 , 是泛型方法 ; 將某個(gè)類型作為參數(shù)傳入 ;
泛型個(gè)數(shù) : 該方法是泛型方法 , 且指定了 222 個(gè)泛型 , 泛型的個(gè)數(shù)可以有很多個(gè) , 多個(gè)泛型之間 , 使用逗號(hào)隔開 ;
泛型方法 與 泛型類 中的泛型 :
-
泛型不同 : 泛型方法指定的泛型 T 與 類中的泛型 T 沒(méi)有任何關(guān)系 , 這兩個(gè) T 可以是不同的類型 ;
-
泛型相同 : 泛型方法中定義的 泛型 T , 與 參數(shù)類型的 T , 返回值類型的 T , 方法內(nèi)部的 T , 都是同一個(gè)類型 ;
四、靜態(tài)方法的泛型
靜態(tài)方法泛型 : 如果靜態(tài)方法中 使用了 類中的泛型 T , 作為參數(shù) 或 返回值 , 這種使用時(shí)錯(cuò)誤的 ;
如果必須在 靜態(tài)方法 中使用泛型 T , 則該泛型 T 必須是靜態(tài)方法的泛型 , 不能是類的泛型 ;
錯(cuò)誤用法 :
正確用法 :
五、泛型類與泛型方法完整示例
/*** 泛型類* 該 T 類型作為參數(shù)使用* T 是參數(shù)化類型 , 可以由外部傳入** @param <T>*/ public class Student<T> {private String name;private int age;/*** 該數(shù)據(jù)的類型未知* 使用泛型表示 , 運(yùn)行時(shí)確定該類型*/private T data;public Student(String name, int age, T data) {this.name = name;this.age = age;this.data = data;}/*** 該方法不是泛型方法* 該方法是普通方法 , 返回值類型是 T 類型* @return*/public T getData() {return data;}public void setData(T data) {this.data = data;}/*** 泛型方法 , 是將某個(gè)類型作為參數(shù)傳入* 方法指定泛型 , 寫法如下 ;** 該方法是泛型方法* 方法指定了 2 個(gè)泛型* 泛型個(gè)數(shù) , 泛型的個(gè)數(shù)可以有很多個(gè)* 多個(gè)泛型之間 , 使用逗號(hào)隔開** 泛型方法指定的泛型 T 與類中的泛型 T 沒(méi)有任何關(guān)系* 這兩個(gè) T 可以是不同的類型** 泛型方法中定義的泛型 T* 與參數(shù)類型的 T* 返回值類型的 T* 方法內(nèi)部的 T* 都是同一個(gè)類型** 與泛型類中的 T 完全沒(méi)有關(guān)系** @param <T>* @param <A>* @return*/public <T, A> T getData2(T arg){T data = arg;return data;}/*** 如果靜態(tài)方法中使用類 類中的泛型* 這種使用時(shí)錯(cuò)誤的** 如果必須在 靜態(tài)方法 中使用泛型 T* 則該泛型 T 必須是靜態(tài)方法的泛型* 不能是類的泛型** @param arg* @return*/public static <T> T getData3(T arg){T data = arg;return data;} }
總結(jié)
以上是生活随笔為你收集整理的【Java 泛型】泛型简介 ( 泛型类 | 泛型方法 | 静态方法的泛型 | 泛型类与泛型方法完整示例 )的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【Java 虚拟机原理】Java 类中的
- 下一篇: 【Java 泛型】泛型用法 ( 泛型类用