我知道我可以通过以下方式获取类的参数化类型:
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注册为值。
答案 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>}