通过反射获取特定的参数化类型

时间:2018-08-01 22:12:45

标签: java reflection

我知道我可以通过以下方式获取类的参数化类型:

Type[] genericInterfaces = getClass().getGenericInterfaces();
for (Type genericInterface : genericInterfaces) {
    if (genericInterface instanceof ParameterizedType) {
        ParameterizedType type = (ParameterizedType) genericInterface;
        // do something 
    }
}

但是假设我需要检查特定的参数化类型,例如List<T>type提供了getRawType().getTypeName(),我可以将其与List的类名(或我不确定的简单类名)进行比较。这是正确的方法吗?

更新

更具体地说:如何获取所有实现特定接口的bean,然后在映射上将泛型类型参数注册为键,将bean注册为值。

1 个答案:

答案 0 :(得分:1)

您的方法仅在List<T>是直接接口且T是显式的情况下有效。

您可以使用我的实用程序类GenericUtil

// your approach only works for this situation
class Foo implements List<String>{}
// your approach not work in these situations
class A<T> implements List<T>{}
class B extends A<Integer>{}
class C extends A<A<C>>{}

GenericUtil.getGenericTypes(Foo.class, List.class); // {String}
GenericUtil.getGenericTypes(A.class, List.class); // {T}
GenericUtil.getGenericTypes(B.class, List.class); // {Integer.class}
GenericUtil.getGenericTypes(C.class, List.class); // {A<C>}