java 获取泛型T的class
时间: 2024-10-16 08:20:00 浏览: 71
在Java中,如果你有一个泛型类或方法,并且需要获取到它的类型参数`T`对应的Class对象,可以使用`java.lang.reflect`包下的`TypeVariable`和`ParameterizedType`类。下面是一个例子:
```java
public class GenericExample<T> {
// ...
public Class<T> getClassOfT() {
Type genericType = getClass().getGenericSuperclass();
if (genericType instanceof ParameterizedType) {
ParameterizedType parameterizedType = (ParameterizedType) genericType;
return (Class<T>) parameterizedType.getActualTypeArguments()[0];
}
throw new RuntimeException("This class is not parameterized");
}
// ...
}
```
在这个`getClassOfT()`方法中,首先获取类的泛型类型,然后检查它是否为`ParameterizedType`。如果是,就从`getActualTypeArguments()`得到类型的数组,取出第一个元素(因为通常只有一个类型参数),并转换为`Class<T>`。
如果类不是泛型,或者泛型的使用方式不符合预期,上述代码会抛出异常。注意,这个过程只能用于获取直接的类型参数,对于间接的类型参数(如List<String>中的`String`)则无法直接获取其Class对象。
阅读全文