java获取泛型T的class对象
时间: 2024-01-29 20:04:24 浏览: 89
Java中获取泛型T的class对象的方法有以下几种:
1. 在类定义时指定泛型类型,直接使用泛型类的class对象即可。
```java
public class MyGenericClass<T> {
private Class<T> clazz;
public MyGenericClass(Class<T> clazz) {
this.clazz = clazz;
}
public Class<T> getClazz() {
return clazz;
}
}
```
2. 使用泛型方法,通过反射获取方法的返回类型,从而得到泛型T的class对象。
```java
public class MyGenericClass {
public static <T> Class<T> getGenericType(Class<?> clazz) {
Type superClass = clazz.getGenericSuperclass();
if (superClass instanceof ParameterizedType) {
Type[] types = ((ParameterizedType) superClass).getActualTypeArguments();
if (types.length > 0 && types[0] instanceof Class) {
return (Class<T>) types[0];
}
}
return null;
}
}
```
3. 使用TypeReference类,它是FastJson库中的一个工具类,可以获取泛型T的class对象。
```java
public abstract class TypeReference<T> {
private final Type type;
protected TypeReference() {
Type superClass = getClass().getGenericSuperclass();
type = ((ParameterizedType) superClass).getActualTypeArguments()[0];
}
public Type getType() {
return type;
}
}
```
使用时只需要继承TypeReference类,并实现泛型T的具体类型。
```java
public class MyGenericClass extends TypeReference<List<String>> {
public MyGenericClass() {
System.out.println(getType()); // class java.util.List<java.lang.String>
}
}
```
阅读全文