日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

【Java 泛型】泛型简介 ( 泛型类 | 泛型方法 | 静态方法的泛型 | 泛型类与泛型方法完整示例 )

發布時間:2025/6/17 java 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Java 泛型】泛型简介 ( 泛型类 | 泛型方法 | 静态方法的泛型 | 泛型类与泛型方法完整示例 ) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 一、泛型簡介
  • 二、泛型類
  • 三、泛型方法
  • 四、靜態方法的泛型
  • 五、泛型類與泛型方法完整示例





一、泛型簡介



泛型 可以 簡單理解為 參數化類型 , 主要作用在 類 , 方法 , 接口 上 ;

java 泛型 與 C++ 模板 : Java 中的泛型 , 是仿照 C++ 中的 模板 開發的 , 目的是讓開發者可以寫出 通用 , 靈活 的代碼 ;

偽泛型 : Java 中的泛型 , 是 偽泛型 , Java 泛型開發好之后 , 在 編譯階段將泛型相關的信息消除 了 , 不會泛型留到運行時 ;


泛型類型 :

  • 泛型方法 : 方法有參數 , 方法的參數 可以指定成一些 泛型 ;
  • 泛型類 : 類 也可以有參數 , 將 類型 作為 參數 傳入類中 ;
  • 泛型接口 : 接口 的 參數 , 也可以是泛型 ;

類型 傳入 泛型方法 , 泛型類 , 泛型接口 中 , 可以 動態地 指定一些類型 ;


泛型的作用 :

  • 安全檢查 :編譯階段 , 就可以進行 代碼檢查 , 將更少的錯誤帶到運行時 ;
  • 避免強轉 : 避免 類型的強轉 導致不必要的安全問題 ;
  • 提高性能 : 使用泛型可以 提高 Java 的性能 ;




二、泛型類



泛型類 :類名后面 使用 <T> 聲明泛型 , 則在該類中 , 可以使用該泛型類型 T 類型 ;

特別注意 , 該類中的 如下 222 個方法 不是 泛型方法 ; 其中的 參數 , 返回值 類型是 T , 但 這個 T 是作為一個正常的類型使用的 , 并不是聲明在 方法 中的泛型 ;

如果 類 , 接口 , 方法 是 泛型類 , 泛型接口 , 泛型方法 , 則該 類 , 接口 , 方法 必須由 <T> 修飾 , 有個帶尖括號的 T ;

public T getData() {return data;}public void setData(T data) {this.data = data;}

泛型類完整代碼示例 :

/*** 泛型類* 該 T 類型作為參數使用* T 是參數化類型 , 可以由外部傳入** @param <T>*/ public class Student<T> {private String name;private int age;/*** 該數據的類型未知* 使用泛型表示 , 運行時確定該類型*/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> 聲明泛型的方法 , 是泛型方法 ; 將某個類型作為參數傳入 ;

泛型個數 : 該方法是泛型方法 , 且指定了 222 個泛型 , 泛型的個數可以有很多個 , 多個泛型之間 , 使用逗號隔開 ;


泛型方法 與 泛型類 中的泛型 :

  • 泛型不同 : 泛型方法指定的泛型 T類中的泛型 T 沒有任何關系 , 這兩個 T 可以是不同的類型 ;

  • 泛型相同 : 泛型方法中定義的 泛型 T , 與 參數類型的 T , 返回值類型的 T , 方法內部的 T , 都是同一個類型 ;

/*** 泛型類* 該 T 類型作為參數使用* T 是參數化類型 , 可以由外部傳入** @param <T>*/ public class Student<T> {private String name;private int age;/*** 該數據的類型未知* 使用泛型表示 , 運行時確定該類型*/private T data;public Student(String name, int age, T data) {this.name = name;this.age = age;this.data = data;}/*** 泛型方法 , 是將某個類型作為參數傳入* 方法指定泛型 , 寫法如下** 該方法是泛型方法* 方法指定了 2 個泛型* 泛型個數 , 泛型的個數可以有很多個* 多個泛型之間 , 使用逗號隔開** 為方法指定的泛型 T 與類中的泛型 T 沒有任何關系* 這兩個 T 可以是不同的類型** 泛型方法中定義的泛型 T* 與參數類型的 T* 返回值類型的 T* 方法內部的 T* 都是同一個類型** 與泛型類中的 T 完全沒有關系** @param <T>* @param <A>* @return*/public <T, A> T getData2(T arg){T data = arg;return data;} }



四、靜態方法的泛型



靜態方法泛型 : 如果靜態方法中 使用了 類中的泛型 T , 作為參數 或 返回值 , 這種使用時錯誤的 ;

如果必須在 靜態方法 中使用泛型 T , 則該泛型 T 必須是靜態方法的泛型 , 不能是類的泛型 ;


錯誤用法 :

正確用法 :





五、泛型類與泛型方法完整示例



/*** 泛型類* 該 T 類型作為參數使用* T 是參數化類型 , 可以由外部傳入** @param <T>*/ public class Student<T> {private String name;private int age;/*** 該數據的類型未知* 使用泛型表示 , 運行時確定該類型*/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;}/*** 泛型方法 , 是將某個類型作為參數傳入* 方法指定泛型 , 寫法如下 ;** 該方法是泛型方法* 方法指定了 2 個泛型* 泛型個數 , 泛型的個數可以有很多個* 多個泛型之間 , 使用逗號隔開** 泛型方法指定的泛型 T 與類中的泛型 T 沒有任何關系* 這兩個 T 可以是不同的類型** 泛型方法中定義的泛型 T* 與參數類型的 T* 返回值類型的 T* 方法內部的 T* 都是同一個類型** 與泛型類中的 T 完全沒有關系** @param <T>* @param <A>* @return*/public <T, A> T getData2(T arg){T data = arg;return data;}/*** 如果靜態方法中使用類 類中的泛型* 這種使用時錯誤的** 如果必須在 靜態方法 中使用泛型 T* 則該泛型 T 必須是靜態方法的泛型* 不能是類的泛型** @param arg* @return*/public static <T> T getData3(T arg){T data = arg;return data;} }

總結

以上是生活随笔為你收集整理的【Java 泛型】泛型简介 ( 泛型类 | 泛型方法 | 静态方法的泛型 | 泛型类与泛型方法完整示例 )的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。