怎么获取泛型T.class类?
时间: 2024-03-18 16:39:17 浏览: 113
Java泛型的用法及T.class的获取过程解析
在Java中,泛型类型是在编译时进行类型擦除的,因此在运行时无法获得泛型类型的实际类型参数。但是,可以通过以下两种方式来获取泛型T.class类:
1. 在类声明中传递泛型类型参数的Class对象,例如:
```
public class MyClass<T> {
private Class<T> clazz;
public MyClass(Class<T> clazz) {
this.clazz = clazz;
}
}
```
在这个例子中,我们将泛型类型参数T的Class对象作为构造函数的参数传递给MyClass类,这样我们就可以在类中使用clazz变量来获取泛型T的Class对象。
2. 通过反射获取泛型类型参数的Class对象,例如:
```
public class MyClass<T> {
private Class<T> clazz;
public MyClass() {
Type superClass = getClass().getGenericSuperclass();
ParameterizedType parameterizedType = (ParameterizedType) superClass;
Type type = parameterizedType.getActualTypeArguments()[0];
this.clazz = (Class<T>) type;
}
}
```
在这个例子中,我们使用反射来获取泛型类型参数T的Class对象。我们首先获取MyClass的父类Type对象,然后将其转换为ParameterizedType对象以获取其实际类型参数列表。由于MyClass只有一个泛型类型参数,因此我们可以通过getActualTypeArguments()方法来获取该列表的第一个元素,即泛型类型参数T的Type对象。最后,我们将Type对象转换为Class对象,并将其存储在clazz变量中,以便在类中使用。
阅读全文