反射-获取泛型信息
反射操作泛型 Java采用泛型擦除的机制来引入泛型, Java中的泛型仅仅是给编译器javac使用的,确保数据的安全性和免去强制类型转换问题,但是,一旦编译完成﹐所有和泛型有关的类型全部擦除 为了通过反射操作这些类型,Java新增了ParameterizedType , GenericArrayType ,TypeVariable和WildcardType几种类型来代表不能被归一到Class类中的类型但是又和原始类型齐名的类型.
ParameterizedType:表示一种参数化类型,比如Collection<String> GenericArrayType:表示一种元素类型是参数化类型或者类型变量的数组类型
TypeVariable :是各种类型变量的公共父接口 WildcardType :代表一种通配符类型表达式
package 反射; 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 Main111{ public void test01(){ System.out.println("test01null"); } public void test01(Map<String,User> map, List<User> list){ System.out.println("test01"); } public Map<String,User>test02(){ System.out.println("test02"); return null; } public static void main(String[] args) throws NoSuchMethodException { Method method=Main111.class.getMethod("test01",Map.class,List.class);//通过类反射获取到方法 Type[] getParameterTypes=method.getGenericParameterTypes();//通过方法来获得到值,getGenericParameterTypes:获得泛型的参数类型 for(Type getParameterType:getParameterTypes){//在这里不写if的话,直接打印getParameterType,结果只是Map和List的结果,如果想要看看Map和List的内部参数就加if如下 if (getParameterType instanceof ParameterizedType){//判断你的参数类型是否等于结构化参数类型,ParameterizedType:表示一种参数化类型,如果是我们就强转出来调用getActualTypeArguments()方法 Type[]actualTyeArguments=((ParameterizedType)getParameterType).getActualTypeArguments();//获得他的真实参数信息 for(Type actualTyeArgument :actualTyeArguments ){ System.out.println(actualTyeArgument); } } } System.out.println("-------------"); method=Main111.class.getMethod("test02", null);//获取他的方法 Type genericReturnpe= method.getGenericReturnType();//获得他的返回值泛型 if (genericReturnpe instanceof ParameterizedType){//判断你的参数类型是否等于结构化参数类型,ParameterizedType:表示一种参数化类型,如果是我们就强转出来调用getActualTypeArguments()方法 Type[]actualTyeArguments=((ParameterizedType)genericReturnpe).getActualTypeArguments();//获得他的真实参数信息 for(Type actualTyeArgument :actualTyeArguments ){ System.out.println(actualTyeArgument); } } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)