学习记录331@Java反射获取泛型

it2025-11-10  10

顺便一说,Java泛型是伪泛型,在编译之后,泛型会被擦除。为了能使用反射获取泛型信息,在jdk5之后,在class文件中加入了的signature属性,主要就是存储泛型信息,因此利用反射获取的泛型就是来自于这里

package com.dream.reflect03; import java.lang.reflect.Method; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import java.util.List; import java.util.Map; public class Test01 { public void method01(Map<String, Integer> map,List<String> list){} public Map<String, Integer> method02(){ return null; } public static void main(String[] args) throws Exception { // //操作参数类型 Class<?> c = Class.forName("com.dream.reflect03.Test01"); // 获取方法 Method declaredMethod = c.getDeclaredMethod("method01", Map.class,List.class); // 获取方法参数 Type[] types = declaredMethod.getGenericParameterTypes(); for (Type type : types) { //判断参数是否是包含泛型 if (type instanceof ParameterizedType ) { //获取泛型 Type[] actualTypeArguments = ((ParameterizedType)type).getActualTypeArguments(); for (Type t : actualTypeArguments) { System.out.println(t); } } } System.out.println("-----------------------------------------------"); //操作返回值类型 Method declaredMethod2 = c.getDeclaredMethod("method02"); //获取返回值类型 Type type = declaredMethod2.getGenericReturnType(); //判断返回值类型是否包含泛型 if (type instanceof ParameterizedType ) { //获取泛型 Type[] actualTypeArguments = ((ParameterizedType)type).getActualTypeArguments(); for (Type t : actualTypeArguments) { System.out.println(t); } } } }

最新回复(0)