java ParameterizedType使用
package com.tencent.weread.dict;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
public class Main {
public static void main(String[] args) throws NoSuchMethodException {
new Sub();
}
}
class Parent {
}
class Child extends Parent {
}
class UpperGeneric {
static class Generic<T, R> {
T t;
R r;
protected Generic(T t, R r) {
this.t = t;
this.r = r;
}
void foo() {
System.err.println(t + " " + r);
}
}
}
class Sub extends UpperGeneric.Generic<Child, Integer> {
protected Sub() {
super(new Child(), 1);
Class clazz = getClass().getSuperclass();
System.err.println("super clazz:" + clazz);
Type type = getClass().getGenericSuperclass();
System.err.println("generic super class type:" + type);
Type trueType = ((ParameterizedType) type).getActualTypeArguments()[0];
System.err.println("generic super class type:" + trueType);
trueType = ((ParameterizedType) type).getActualTypeArguments()[1];
System.err.println("type:" + trueType);
trueType = ((ParameterizedType) type).getRawType();
System.err.println("raw type:" + trueType);
trueType = ((ParameterizedType) type).getOwnerType();
System.err.println("owner type:" + trueType);
}
}
getOwnerType:获取一个type的包装类。如果type不是任何类的内部类,返回null,否则返回外部类的Type
getActualTypeArguments:获取泛型类的参数类型