Spring 里有用工具类:
GenericTypeResolver 解析泛型类型。核心逻辑还是调用 ResolvableType
ResolvableType 解析泛型类型参数
1 interface Service2<N, M> {} 2 3 class ABService2 implements Service2<A, B> {} 4 class A {} 5 class B{} 6 7 8 public class TestGenericClass2 { 9 10 public static void main(String[] args) { 11 /** JDK 原生的方法获取泛型参数 **/ 12 //获取ABService2实现的第一个接口,即Service2<A, B> 13 ParameterizedType parameterizedType = (ParameterizedType) ABService2.class.getGenericInterfaces()[0]; 14 System.out.println(parameterizedType); 15 //从Service2<A, B> 获得第1个泛型参数,即A 16 Type genericType = parameterizedType.getActualTypeArguments()[0]; 17 System.out.println(genericType); 18 System.out.println("*************"); 19 20 /** 通过 Spring API 获取泛型参数 **/ 21 ResolvableType resolvableType = ResolvableType.forClass(ABService2.class); 22 // 以下两种方式都可以获取到泛型参数 A 23 // 指定类来获取 24 Class c=resolvableType.as(Service2.class).getGeneric(0).resolve(); 25 Class d=resolvableType.getInterfaces()[0].getGeneric(0).resolve(); 26 System.out.println("c "+c); 27 System.out.println("d "+d); 28 System.out.println("__________"); 29 30 //下面的可以获得被aop代理之前的类型 31 // ClassUtils.getUserClass(myClass); 32 } 33 }