Java之反射机制六:获取方法的泛型信息
一.测试类
public class Test02 { public void parameterTest(Map<Integer, Dog> map){ } public Map<Integer,Dog> returnTest(){ return new HashMap<Integer, Dog>(); } }
二.获取方法的参数中的泛型信息
@Test //获取方法的参数中的泛型信息 public void test() throws NoSuchMethodException { Method method = Test02.class.getMethod("parameterTest", Map.class); //获取方法的参数类型 Type[] genericParameterTypes = method.getGenericParameterTypes(); for (Type genericParameterType : genericParameterTypes) { System.out.println("type:"+genericParameterType); //ParameterizedType:表示一种参数化类型,比如Collection<Object> if(genericParameterType instanceof ParameterizedType){ Type[] actualTypeArguments = ((ParameterizedType) genericParameterType).getActualTypeArguments(); for (Type parameterType : actualTypeArguments) { System.out.println(parameterType); } } } }
运行结果:
三.获取方法的返回值中的泛型信息
@Test //获取方法的返回值中的泛型信息 public void test2() throws NoSuchMethodException { Method method = Test02.class.getMethod("returnTest"); //获取方法的返回值类型 Type genericReturnType = method.getGenericReturnType(); if(genericReturnType instanceof ParameterizedType){ Type[] actualTypeArguments = ((ParameterizedType) genericReturnType).getActualTypeArguments(); for (Type parameterType : actualTypeArguments) { System.out.println(parameterType); } } }