假設我們定義了一個Room的類,表示一個房間
public classRoom(){
}
由于我們建造好房間是,不知道房間以后的用途,他可能用來住人,也有可能用來放貨物,因此需要用到泛型。但是我們可能想獲取Room這個房間里面進來的的東西的類型,這時候就需要了解怎樣獲取泛型類型。
java中有一個Type接口
根據接口的定義,Type表示的是java里面所有的類型
查看Type的子接口我們可以看到
其中ParameterizedType這個接口代表的就是泛型這個類型
ParamterizedType接口中有三個方法:
Type[] getActualTypeArguments();
Type getRawType();
Type getOwnerType();
我們以Room類為例
getActualTypeArguments()返回的是 ?,我們可以把泛型看做是類的形參,這個方法返回的就是<>括號內所有泛型類型
getRawType(); 返回的是 Room 這個類型,也就是類本身
getOwnerType(); 返回的是 Room,也就是類加上泛型參數
例子:
public class Room{
public Room(){
ParameterizedType type= (ParameterizedType) this.getClass().getGenericSuperclass();
Class entityClass=(Class) type.getActualTypeArguments()[0];
String name=entityClass.toString();
System.out.println("住進來的是:"+name);
}
}
其中
this.getClass().getGenericSuperclass();
返回的是 Room
然后我們利用
type.getActualTypeArguments()[0];
就可以得到 ?Person.class
也就得到了傳進來的泛型類型