使用Guava获取某一个类的指定超类上的泛型Type T
时间: 2024-02-09 11:08:00 浏览: 169
可以通过使用Guava中的TypeToken类来获取指定超类上的泛型Type T。以下是示例代码:
```java
public static <T> TypeToken<T> getTypeToken(Class<?> clazz, Class<?> superClass, int index) {
TypeToken<?> token = TypeToken.of(clazz);
Type type = token.getSupertype(superClass).getType();
if (type instanceof ParameterizedType) {
ParameterizedType paramType = (ParameterizedType) type;
Type[] typeArgs = paramType.getActualTypeArguments();
TypeToken<T> typeToken = (TypeToken<T>) TypeToken.of(typeArgs[index]);
return typeToken;
} else {
throw new IllegalArgumentException("class " + clazz.getName() + " does not have a parameterized superclass of " + superClass.getName());
}
}
```
该方法将输入一个类clazz、一个超类superClass和一个索引index,然后返回该超类上的泛型Type T对应的TypeToken。例如,如果我们要获取类A的超类B上第一个泛型参数的TypeToken,可以这样调用:
```java
TypeToken<MyClass> typeToken = getTypeToken(A.class, B.class, 0);
```
请注意,这种方式只适用于已经知道超类是参数化的情况,如果超类不是参数化的,则会抛出IllegalArgumentException异常。
阅读全文