1. 程式人生 > >Java中泛型T和Class<T>以及Class<?>的理解(轉)

Java中泛型T和Class<T>以及Class<?>的理解(轉)

tcl ota 特定 類型 基本 ext pla enum extend

註意:class是java的關鍵字, 在聲明Java類時使用;

Class類的實例表示Java應用運行時的類(class ans enum)或接口(interface and annotation)(每個Java類運行時都在JVM裏表現為一個Class對象,可通過類名.class,類型.getClass(),Class.forName("類名")等方法獲取Class對象)。數組同樣也被映射為為Class對象的一個類,所有具有相同元素類型和維數的數組都共享該Class對象。基本類型boolean,byte,char,short,int,long,float,double和關鍵字void同樣表現為Class對象。

T bean ;

Class<T> bean;

Class<?> bean;

單獨的T代表一個類型,而Class<T>和Class<?>代表這個類型所對應的類

Class<T>在實例化的時候,T要替換成具體類

Class<?>它是個通配泛型,?可以代表任何類型

<? extends T>受限統配,表示T的一個未知子類。

<? super T>下限統配,表示T的一個未知父類。

public T find(Class<T> clazz, int id);

根據類來反射生成一個實例,而單獨用T沒法做到。

Object類中包含一個方法名叫getClass,利用這個方法就可以獲得一個實例的類型類。類型類指的是代表一個類型的類,因為一切皆是對象,類型也不例外,在Java使用類型類來表示一個類型。所有的類型類都是Class類的實例。getClass()會看到返回Class<?>。

JDK中,普通的Class.newInstance()方法的定義返回Object,要將該返回類型強制轉換為另一種類型;

但是使用泛型的Class<T>,Class.newInstance()方法具有一個特定的返回類型;

參考:

http://blog.csdn.net/witewater/article/details/53462385(以上內容轉自此篇文章)

https://www.cnblogs.com/sprinng/p/5641209.html

Java中泛型T和Class<T>以及Class<?>的理解(轉)