在Java中,声明数组的时候我们经常会写泛型限制用户输入或者获取的数据。如:ArrayList<String> list = new ArrayList<>();
String就是泛型。当我们调用
list.add();方法的时候,如果输入整型数据,编译就会报错。
当我们引用其他大牛写的第三方Jar包,有时候和包中定义的数据类型不一样,这个时候就要用java的反射机制跳过编译阶段。
ArrayList list = new ArrayList<>(); ArrayList<String> listStr = new ArrayList<>(); list.add("obj"); listStr.add("str");
//获得ArrayList的类类型
Class c1 = list.getClass();
Class c2= listStr.getClass();
//反射操作都是编译之后的操作
System.out.println(c1==c2);
//返回true.Java中限制输入的泛型只在编译时有效
*Java反射机制可以无视泛型的原因就是因为泛型只在编译时生效
然后我们就可以通过获取类中的add方法(
Method method = c2.getMethod("add", Object.class);
)向list中插入值.在上面我们定义的泛型是String类型,但是在这我们插入
20依旧会添加到listStr中。
Method method = c2.getMethod("add", Object.class);
Object obj = method.invoke(listStr, 20);
System.out.println(listStr.size());
关于class中方法的参数以及怎么通过class.getMethod()获得不同类中的方法在javaapi中都可以查看,在我的源码中也都有实例。
实例CODE:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端