java 泛型 讀書筆記

概念:

泛型本質上是提供類型的"類型參數",它們也被稱爲參數化類型(parameterized type)或參量多態(parametric polymorphism)。

 

作用:

1>類型安全。使用泛型可以使編譯器知道變量的類型限制,進而可以在更高程度上驗證類型假設。如果沒有泛型,那麼類型的安全性主要由程序員來把握,這顯然不如帶有泛型的程序安全性高。

2>消除強制類型轉換。泛型可以消除源代碼中的許多強制類型轉換,這樣可以使代碼更加可讀,並減少出錯的機會。

3>向後兼容。支持泛型的 Java 編譯器(例如 JDK5.0 中的 Javac)可以用來編譯經過泛型擴充的 Java 程序(GJ 程序),但是現有的沒有使用泛型擴充的 Java 程序仍然可以用這些編譯器來編譯。

4>層次清晰,恪守規範。無論被編譯的源程序是否使用泛型擴充,編譯生成的字節碼均可被虛擬機接受並執行。也就是說不管編譯器的輸入是 GJ 程序,還是一般的 Java 程序,經過編譯後的字節碼都嚴格遵循《 Java 虛擬機規範》中對字節碼的要求。可見,泛型主要是在編譯器層面實現的,它對於Java 虛擬機是透明的。

5>性能收益。目前來講,用 GJ 編寫的代碼和一般的 Java 代碼在效率上是非常接近的。 但是由於泛型會給 Java 編譯器和虛擬機帶來更多的類型信息,因此利用這些信息對 Java 程序做進一步優化將成爲可能。

 

泛型的運作過程:GJGeneric Java)是對 Java 語言的一種擴展,是一種帶有參數化類型的 Java 語言。用 GJ 編寫的程序看起來和普通的 Java 程序基本相同,只不過多了一些參數化的類型同時少了一些類型轉換。實際上,這些 GJ 程序也是首先被轉化成一般的不帶泛型的 Java 程序後再進行處理的,編譯器自動完成了從 Generic Java 到普通 Java 的翻譯。

編程用的到的例子:

通配符

 

1 self-bounded types

  curiously recurring generics

父類使用泛型做成模板,然後對於不同的應用

使用派生出來的類。然後填充參數,取出值什麼的都用這個子類。注重模板功能 

    self-bounded 

       這個迫使使用這個泛型的類爲其子類

對於參數化的接口,使用時需要注意這種情況 

   public  interface A<T>{}

   public class B implents A<Integer>{

   }

   這麼做是不行的,編輯器會認爲 c 實現了兩個接口,因了擦洗(erasure),或者也可以這麼理解C繼承了B integer 也繼承過來了。你再換個double 編輯器不認的。

   public class C extends  B implentA<Double>{

 

   }

   這時你如果寫成這樣

   public class C extends  B implent A{

 

   }

    編輯器是認的。

   或者這樣

    public class C extends  B implentA<Integer>{

 

   }

  也是行的。

   或者這樣

   public class C extends B{

}

 

 這也是行的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章