黑馬程式設計師訓練營 泛型

2021-05-25 00:26:21 字數 1538 閱讀 5004

一、泛型的概念

泛型在本質上是指引數化型別。引數化型別的重要性在於,它們允許建立這樣的一些類、介面和方法:其所操縱的資料型別被指定為乙個引數。需要注意的是,引數化型別只在編譯期間才有意義,即其存在是為編譯器更嚴格的型別檢查而服務的,因此它確保了型別安全。

二、泛型中的相關術語

1、arraylist:整體稱為泛型型別。

2、arraylist中的

e:型別變數或型別引數。

3、arraylist:已經用型別實參代替型別變數的整體稱為引數化型別。

4、arraylist:稱為原始型別。 三

、泛型萬用字元:

1、限定萬用字元的上邊界:<? extends supressclass>

2、限定萬用字元的下邊界:<? super subclass> 3

、<?>

與的區別:

(1)<?>

表示任意一種型別,即為一般。

(2)表示某一特定型別,即為特殊。

(3)特殊可以賦予一般,但一般不能賦予特殊。

(4)基於第三條分析,可以用

型別引數呼叫以

<?>

作為形參的方法,但反之則不行。

四、泛型的限制

1、引數化型別與原始型別相相容:即引數化型別和原始型別的物件之間可以相互引用,但會收到編譯器的警告資訊。

2、引數化型別不考慮型別引數的繼承關係:即型別引數之間有繼承關係的引數化型別物件之間不能相互引用,但這只是語法上的限制(編譯期間),不是邏輯上的限制(執行期間),因此不是絕對的。

3、泛型的型別變數只能是類型別,不能是簡單型別。

4、型別引數不能被例項化。 5

、靜態成員不能使用封閉類所宣告的型別引數,但可以宣告靜態泛型方法。 6

、為了型別安全,

不能建立乙個型別特定的泛型引用的陣列。 7

、泛型類不能擴充套件throwable

,這意味著不能建立泛型異常。 8

、型別引數限制了物件的運算元據型別,而反射則能夠還原出物件的原始型別所提供的方法,進而就放寬了物件的運算元據範圍。 五

、自定義泛型方法

1、格式:在方法的返回值前指定型別引數。

2、說明:普通方法、靜態方法、構造方法都可以使用泛型。方法的型別引數可以使用泛型萬用字元規則,並且可以使用&

運算子指定多個邊界。需要特別注意的是,如果在方法體內多處引用同一型別變數,那麼型別變數的最終型別將是呼叫者提供的所有型別實參的最簡併集的型別。 六

、自定義泛型類或介面

1、格式:在類名稱後類身體前指定型別引數。

2、說明:泛型類與泛型方法的區別在於,泛型類的型別變數可以被類物件身上的所有方法引用(靜態方法除外),而泛型方法的型別變數在能在方法體內被引用。此外泛型類的型別變數還起到了統一物件方法操作的資料型別的作用。 七

、通過反射獲得引數型別原理

由於執行時引數型別被擦掉,所以無法獲得實際的引數型別。但是在method

方法中提供了獲得某一方法的引數化型別的方法。只要將引數化型別置於任一方法的引數列表中,即可通過反射此方法而獲得其引數的引數化型別資訊。

注意:引數化型別不支援方法過載。

黑馬程式設計師 泛型

泛型定義在類上 class utlis 物件,方法 泛型定義在方法上 public void print 泛型定義在類上和定義在方法上的 區別?泛型定義在類上,想要呼叫同一種方法,不同型別或不同方法的不同型別,要new多次不同型別的類。泛型定義在方法上,想要呼叫同一種方法,不同型別或不同方法的不同型...

黑馬程式設計師 泛型集合

把任何型別物件通過add object obj 放入list中,認為只是object型別 通過get int index 取出list中元素時必須進行強制型別轉換,繁瑣而且容易出現異常 使用map的put object key,object value 和get object key 訪問物件時存在...

黑馬程式設計師 泛型基礎

泛型 主要思想就是將演算法從資料結構中抽象出來,使得預定義的操作能夠作用於不同的型別,從而提高城鄉的效率 通用性和型別安全性,進而簡化整個程式設計模型。1 為何使用泛型 例項多個過載方法 public static void swap ref int x,ref int y public stati...