typetoken获取泛型
时间: 2023-07-08 08:29:30 浏览: 208
要获取泛型类型,可以使用Java反射API中的TypeToken类。TypeToken类是Gson库提供的一个类,可以用于获取泛型类型的Type对象。下面是一个示例:
```java
TypeToken<List<String>> typeToken = new TypeToken<List<String>>() {};
Type type = typeToken.getType();
```
这里创建了一个TypeToken对象,指定了List<String>类型。然后通过调用getType()方法获取了对应的Type对象。这个Type对象可以用于解析JSON字符串中的泛型类型。
相关问题
获取泛型中的类
要获取泛型中的类,可以使用Java反射机制中的TypeToken类。这个类可以帮助我们获取泛型中的类型信息,例如:
```
public abstract class GenericClass<T> {
private final TypeToken<T> typeToken = new TypeToken<T>(getClass()) {};
public Class<T> getGenericType() {
return (Class<T>) typeToken.getRawType();
}
}
```
在上面的例子中,我们定义了一个泛型类GenericClass<T>,其中T是泛型参数。我们通过创建一个TypeToken对象来获取泛型参数T的类型信息,然后通过getRawType()方法获取该类型的Class对象。
使用这个方法,我们可以很容易地获取泛型中的类,例如:
```
public class Example {
public static void main(String[] args) {
GenericClass<String> gc = new GenericClass<String>() {};
Class<String> clazz = gc.getGenericType();
System.out.println(clazz.getName()); // 输出:java.lang.String
}
}
```
在这个例子中,我们创建了一个GenericClass<String>对象,并通过getGenericType()方法获取了泛型参数String的类型信息。最终我们输出了这个类型的名称。
泛型获取class
要获取泛型的 class,可以使用 TypeToken 类。例如,我们定义了一个泛型类 MyGenericClass<T>,要获取 T 的 class,可以这样写:
```
public class MyGenericClass<T> {
private Class<T> clazz;
public MyGenericClass() {
Type type = getClass().getGenericSuperclass();
ParameterizedType parameterizedType = (ParameterizedType) type;
clazz = (Class<T>) parameterizedType.getActualTypeArguments()[0];
}
public Class<T> getClazz() {
return clazz;
}
}
```
然后我们可以这样使用:
```
MyGenericClass<String> myGenericClass = new MyGenericClass<>();
Class<String> clazz = myGenericClass.getClazz();
```
这样就能获取到 String 的 class 了。
阅读全文