如何使用Java反射读取类泛型参数

时间:2015-03-19 14:39:33

标签: java generics reflection

我有一个班级BaseClass<X, Y, Z>。我将该类实现为SuperCar implements BaseClass<Color, Engine, Foo>。所以现在我需要通过使用SuperCar类的反射来获得那些X,Y,Z值。这可能吗?

2 个答案:

答案 0 :(得分:1)

您可以检查超类的类型参数,Class的{​​{1}}:

SuperCar

这应该给你:

SuperCar car = new SuperCar();
ParameterizedType parameterizedType = (ParameterizedType) car.getClass().getGenericSuperclass();
Type[] superClassTypes = parameterizedType.getActualTypeArguments();
for (Type type : superClassTypes) {
    System.out.println(type.getTypeName());
}

答案 1 :(得分:1)

我想你想要这样的东西:

ParameterizedType types = (ParameterizedType) SuperCar.class.getGenericInterfaces()[0];
for (Type type : types.getActualTypeArguments()) {
    Class<?> cl = (Class<?>) type;
    System.out.println(cl.getName());
}

而不是打印名称,你可以随心所欲地做任何事情