public abstract class GenericClass<T> {
Class<T> type;
public GenericClass() {
this.type = (Class<T>) getClass();
}
public List<Map<T, T>> getValue() {
return null;
}
}
private void getGenericsArguments() {
// 匿名内部类
GenericClass<String> genericClass = new GenericClass<String>() {
@Override
public List<Map<String, String>> getValue() {
return null;
}
};
ParameterizedType superType = (ParameterizedType) genericClass.getClass().getGenericSuperclass();
for (Type actualTypeArgument : superType.getActualTypeArguments()) {
System.out.println(TAG + " Superclass + actualTypeArgument: " + actualTypeArgument);
// GenericTest Superclass + actualTypeArgument: class java.lang.String
}
try {
ParameterizedType methodType = (ParameterizedType) genericClass.getClass().getMethod("getValue").getGenericReturnType();
for (Type actualTypeArgument : methodType.getActualTypeArguments()) {
System.out.println(TAG + " Method + actualTypeArgument: " + actualTypeArgument);
// GenericTest Method + actualTypeArgument: java.util.Map<java.lang.String, java.lang.String>
}
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
}