Java泛型Generic - Thinking in Java讀書筆記
1.什麽是泛型?
泛型就是可適用於很多的類,它實現了參數化類型type parameter的概念,參數化類型指可使用多種類型。
多態是一種泛化機制。
例如方法 A(Base b){}//Base是一個基類
這樣方法A就可以接受從這個基類Base的任何子類作為參數。方法的參數也可以是一個接口,但是由於類的單繼承體系和接口的約束(
An interface still requires that your code works with that particular interface.
),不能實現將代碼應用於不明確的類型,無法做到松耦合。
2.什麽時候用到泛型?怎麽用?
1)創造容器類。Create container classes.
There are some cases where you want a container to hold multiple types of objects, but typically you only put one type of object into a container. One of the primary motivations for generics is to specify what type of object a container holds, and to have that specification backed up by the compiler.
有些情況下你想用一個容器來持有多種對象,但容器通常只能存儲一種對象。泛型最主要的一個目的是說明一個容器能持有什麽類型的對象,而且由編譯器來保證準確性。
所以我們可以暫時不指定類型,稍後再決定具體類型。使用type parameter類型參數,用<>尖括號括住,放在類名後面,等到使用這個類時再用一個實際的類型來替換,例子如下,
public class Holder3<T> { private T a; public Holder3(T a) { this.a = a; } public void set(T a) { this.a = a; } public T get() { return a; } public static void main(String[] args) {
Holder3<Automobile> h3 = new Holder3<Automobile>(new Automobile());
Automobile a = h3.get(); // No cast needed // h3.set("Not an Automobile"); // Error // h3.set(1); // Error
}
} ///:~
20180124未完待續...
轉自維基百科中Java泛型
https://zh.wikipedia.org/wiki/%E6%B3%9B%E5%9E%8B
Java 的泛型[編輯]
參見:JavaJava 泛型的參數只可以代表類,不能代表個別對象。由於Java泛型的類型參數之實際類型在編譯時會被消除,所以無法在運行時得知其類型參數的類型,而且無法直接使用基本值類型作為泛型類型參數。Java編譯程序在編譯泛型時會自動加入類型轉換的編碼,故運行速度不會因為使用泛型而加快。
由於運行時會消除泛型的對象實例類型信息等缺陷經常被人詬病,Java及JVM的開發方面也嘗試解決這個問題,例如Java通過在生成字節碼時添加類型推導輔助信息,從而可以通過反射接口獲得部分泛型信息。通過改進泛型在JVM的實現,使其支持基本值類型泛型和直接獲得泛型信息等。
Java允許對個別泛型的類型參數進行約束,包括以下兩種形式[2](假設T
是泛型的類型參數,C
是一般類、泛類,或是泛型的類型參數):
T
實現接口I
。T
是C
,或繼承自C
。
Java泛型Generic - Thinking in Java讀書筆記