反射
反射
Reflect,围着大Class转
1.获得大Class
//基本数据类型或者类类型获得大Class
Class<Integer> integerClass = int.class;
Class<Student> studentClass = Student.class;
//对象(引用)获得大Class,它是调用getClass()方法
Student stu = new Student();
Class<? extends Student> aClass = stu.getClass();//这句代码的含义就是:stu引用在运行时所指向对象的实际类型
2.反射调用方法
反射会报编译时异常,例如NoSuchMethodException,预防方法找不到的情况,上代码:
public class ReflectTest {
public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
//获得大Class
Student stu = new Student("tom",18,1);
Class<? extends Student> aClass = stu.getClass();
//获得名叫toString的方法,因为toString不用传参数,所以参数类型写null
Method m1 = aClass.getMethod("toString", null);
//invoke是执行方法的意思,stu对象调用m1这个方法,没有参数
Object result = m1.invoke(stu, null);
//上面两行相当于传统的Object s = stu.toString();
System.out.println(result);
System.out.println("---------------");
//以下两行相当于stu.sayHello("briup");
Method m2 = aClass.getMethod("sayHello", String.class);
Object result2 = m2.invoke(stu, "briup");
//这里的sayHello方法因为返回值是void,所以打印result2是null
}
}
这一路,灯火通明
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现