黑馬程式設計師 泛型學習筆記

2021-06-25 22:37:35 字數 1772 閱讀 9533

---------------------- 

黑馬程式設計師 android培訓、期待與您交流! 

----------------------

jdk1.5版本以後出現的乙個安全機制。表現格式:< >

好處:1:將執行時期的問題classcastexception問題轉換成了編譯失敗,體現在編譯時期,程式設計師就可以解決問題。

2:避免了強制轉換的麻煩。

只要帶有<>的類或者介面,都屬於帶有型別引數的類或者介面,在使用這些類或者介面時,必須給<>中傳遞乙個具體的引用資料型別。

泛型技術:其實應用在編譯時期,是給編譯器使用的技術,到了執行時期,泛型就不存在了。因為泛型的擦除:也就是說,編輯器檢查了泛型的型別正確後,在生成的類檔案中是沒有泛型的。

泛型的補償:因為儲存的時候,型別已經確定了是同乙個型別的元素,所以在執行時,只要獲取到該元素的型別,在內部進行一次轉換即可,所以使用者不用再做轉換動作了。

當類中的操作的引用資料型別不確定的時候,以前用的object來進行擴充套件的,現在可以用泛型來表示。這樣可以避免強轉的麻煩,而且將執行問題轉移到的編譯時期。

泛型在程式定義上的體現:

//泛型類:將泛型定義在類上。

class tool

public q getobject()

//當方法操作的引用資料型別不確定的時候,可以將泛型定義在方法上。

public void method(w w)

泛型中的萬用字元:可以解決當具體型別不確定的時候,這個萬用字元就是 ?  ;當操作型別時,不需要使用型別的具體功能時,只使用object類中的功能。那麼可以用 ? 萬用字元來表未知型別。

泛型限定:

上限:?extends e:可以接收e型別或者e的子型別物件。

下限:?super e:可以接收e型別或者e的父型別物件。

上限什麼時候用:往集合中新增元素時,既可以新增e型別物件,又可以新增e的子型別物件。為什麼?因為取的時候,e型別既可以接收e類物件,又可以接收e的子型別物件。

下限什麼時候用:當從集合中獲取元素進行操作的時候,可以用當前元素的型別接收,也可以用當前元素的父型別接收。

泛型的細節:

1)、泛型到底代表什麼型別取決於呼叫者傳入的型別,如果沒傳,預設是object型別;

2)、使用帶泛型的類建立物件時,等式兩邊指定的泛型必須一致;

原因:編譯器檢查物件呼叫方法時只看變數,然而程式執行期間呼叫方法時就要考慮物件具體型別了;

3)、等式兩邊可以在任意一邊使用泛型,在另一邊不使用(考慮向後相容);

arraylistal = newarraylist();  //錯

//要保證左右兩邊的泛型具體型別一致就可以了,這樣不容易出錯。

arraylist<? extends object>al = new arraylist();

al.add("aa");  //錯

//因為集合具體物件中既可儲存string,也可以儲存object的其他子類,所以新增具體的型別物件不合適,型別檢查會出現安全問題。 ?extendsobject 代表object的子型別不確定,怎麼能新增具體型別的物件呢?

public static voidmethod(arraylist<? extends object> al) {

al.add("abc");  //錯

//只能對al集合中的元素呼叫object類中的方法,具體子型別的方法都不能用,因為子型別不確定。

---------------------- 

黑馬程式設計師 android培訓、期待與您交流! 

----------------------

黑馬程式設計師 泛型

泛型定義在類上 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...