泛型:jdk1.5後出現的安全機制。
好處:1、將執行時期的問題classcastexception轉到了編譯時期。
2、避免了強制轉換的麻煩。
<>什麼時候使用?
當操作的引用資料型別不確定的時候,就使用<>,將要操作的引用資料型別傳入即可。
其實<>就是乙個用於接收具體引用資料型別的引數範圍。
在程式中,只要用到了帶有<>的類或者介面,就要明確傳入的具體引用資料型別。
泛型技術是給編譯器使用的技術,用於編譯時期,確保了型別的安全。
執行時,會將泛型去掉,生成的class檔案中是不帶泛型的,這個成為泛型的擦除。
為什麼擦除? 因為為了相容執行時的載入器。jdk1.5之前用的類載入器和jdk1.5後用的類載入器是一樣的,而jdk1.5之前沒有泛型。
泛型的補償:在執行時,通過獲取元素的型別進行轉換動作,不用使用者再強制轉換了。
集合儲存自定義型別:
public class person implements comparable
public person(string name, int age)
public string getname()
public void setname(string name)
public int getage()
public void setage(int age)
public int compareto(person p)
}
使用treeset集合時,需要實現comparable介面中的compareto方法,
或者自己定義比較器,實現comparator裡面的compare方法,如下圖:
public static void main(string args)
}
public class comparatorbyname implements comparator
}
將泛型定義在介面上就得到泛型介面,在實現介面的同時,可以指定引用型別,如第16行中的形式。
如果在實現介面時還不確定具體的型別,可以再次定義泛型來代替引用型別,如第23行,這種方式
在定義物件的時候必須指定引用型別,如第7行。
public class genericdemo1
}//泛型介面,將泛型定義在介面上。
inte***ce inter
class interimpl1 implements inter
}class interimpl2implements inter
}
泛型的萬用字元:?代表未知型別,這樣可以復用集合的迭代器,根據建立物件時指定的引用型別,
對不同的引用型別進行迭代。
public static void main(string args)
//用?來代替未知型別
private static void printcollection(collection<?> a1)
}
泛型的限定,可以指定接收型別的範圍。<? extends person>表示只能接收person或者person子類的型別。
通用形式:? extends e 表示接收e型別,或者e的子型別物件,這是上限。
通用形式:? super e 表示接收e型別,或者e的父型別,這是下限。
private static void printcollection(collection<? extends person> a1)
}
什麼時候使用上限?
一般在儲存元素的時候都是用上限,因為這樣取出都是按照上限型別來運算的,不會出現型別隱患。
什麼時候使用下限?
通常對集合中的元素進行取出操作時用下限。
Java學習筆記之泛型 三 泛型類
package com.collection.genericity 泛型類 需求 編寫乙個陣列的工具類 泛型類的定義格式 class 類名 宣告自定義泛型 泛型類要注意的事項 1 在類上自定義泛型的具體資料型別是在使用該類建立物件的時候確定的 2 如果已經在乙個類上宣告了自定義泛型,但是使用該類建立...
Java基礎再學習之泛型
泛型在jdk1.5出來的,以為自己很理解它了,至少看看 寫寫基本的沒有問題。由於是個新事物,對於我這種從jdk1.1過來的人來說還是乙個思維上的跳躍。最近寫了一些 好好整理了一下。b 為什麼會出現泛型 b 我喜歡事事問為什麼,要不然就覺得心裡不踏實。我已經不止一次的提到過,任何的新技術的出現都是伴隨...
Java之泛型程式設計
1.概念 泛型就是引數化型別。泛型的好處是在編譯的時候檢查型別安全,並且所有的強制轉換都是自動和隱式的,提高 的重用率。2.案例 1 先看下面案例 不適用泛型程式設計 list li new arraylist 使用泛型程式設計如下 使用泛型的優點 大型應用時能顯著降低程式的複雜度 泛型為較大的優化...