java基礎筆記-泛型
- 泛型的好處
-
- 傳統方法存在的問題
- 泛型介紹
- 泛型的文法
-
- 泛型的聲明
- 自定義泛型類
-
- 注意細節
- 自定義泛型接口
-
- 注意細節
- 自定義泛型方法
-
- 注意細節
泛型的好處
傳統方法存在的問題
- 不能對加入到集合ArrayList中的資料類型進行限制(不安全)
- 周遊的時候,需要對資料類型進行轉換,資料量大的時候會對效率有影響
泛型介紹
- 泛型:可以表示資料類型的一種類型
- 泛型又稱參數化類型,是JDK5.0新出現的類型,為了解決資料安全性問題。
- 泛型的作用是,可以在類聲明時通過一個辨別表示類中某個屬性的類型,或者是某個方法的傳回值類型,或者是參數類型。
class Person<E> {
E s; // E表示資料的類型,該類型在定義Person對象的時候指定,即在編譯期間,就确定E是什麼類型
public Person(E s) { // E可以是參數類型
this.s = s;
}
public E f() { //E可以是傳回值類型
return s;
}
}
泛型的文法
泛型的聲明
interface 接口名{}
class 類名<K,V>{}
- 其中,T、K、V不代表值,而是表示
引用類型
- 任意字母都可。常用T表示,是type的縮寫。
- 在給泛型指定具體類型後,可以傳入該類型或其子類類型。
- List list = new ArrayList();預設的泛型是Object。
自定義泛型類
- 基本文法
class 類名<T,R...> {//...表示可以有多個泛型
成員
}
注意細節
- 普通成員可以使用泛型(屬性、方法)
- 使用泛型的數組,不能初始化 eg:
是不允許的。T[] t = new T[8]
- 靜态方法中不能使用類的泛型,因為靜态是和類相關的,類加載時對象還沒有建立。是以如果靜态方法和靜态屬性使用了泛型,JVM就無法完成初始化。
- 泛型類的類型,是在建立對象時确定的
- 如果在建立對象時沒有指定類型,則預設為object
自定義泛型接口
- 基本文法
interface 接口名<T,R...>{
}
注意細節
- 接口中靜态成員也不能使用泛型
- 泛型接口的類型,在繼承接口或實作接口時确定
- 沒有指定類型,預設為Object類型
自定義泛型方法
- 基本文法
修飾符 <T,R...> 傳回類型 方法名(參數清單){
}
注意細節
- 泛型方法,可以定義在普通類中,也可以定義在泛型類中
- 當泛型方法被調用時,類型會确定
- public void eat(E e) {},修飾符後沒有<T,R…>,eat方法不是泛型方法,而是使用了泛型