天天看點

java基礎筆記12-泛型詳解泛型的好處泛型介紹泛型的文法自定義泛型類自定義泛型接口自定義泛型方法

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方法不是泛型方法,而是使用了泛型