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

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


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 注册为值。


qq_遁去的一_1
浏览 177回答 1
1回答

慕沐林林

您的方法仅适用于List<T>直接接口且 T 是显式的。您可以使用我的实用程序类 GenericUtil// your approach only works for this situationclass Foo implements List<String>{}// your approach not work in these situationsclass 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>}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java