我知道我可以通过以下方式获取类的参数化类型: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 回答
慕沐林林
TA贡献2016条经验 获得超9个赞
您的方法仅适用于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>}
添加回答
举报
0/150
提交
取消