为了账号安全,请及时绑定邮箱和手机立即绑定

使用反射获取特定的参数化类型

使用反射获取特定的参数化类型

qq_遁去的一_1 2021-06-22 17:01:55
我知道我可以通过以下方式获取类的参数化类型: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>}


查看完整回答
反对 回复 2021-06-23
  • 1 回答
  • 0 关注
  • 172 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信