假设我们定义了一个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
也就得到了传进来的泛型类型