反射
4个对象
-
Class:class 文件
获取 Class 方法
类.class
、对象.getClass()
、Class.forName("全限定类名")
-
Field:成员变量
-
Method:成员方法
-
Constructor:构造方法
Class 常用 API
作用 | 方法 | 说明 |
---|---|---|
获取类全限定名 | clazz.getName()、`clazz.getCanonicalName() | 如果内部类,这俩方法返回值有区别 |
获取类名 | clazz.getSimpleName() | |
是否是接口 | clazz.isInterface() | |
获取实现的接口 | clazz.getInterfaces() | 所有接口,多层 |
获取父类 | clazz.getSupercalss() | 直接父类(爷爷辈的获取不了) |
使用无参构造创建实例 | clazz.newInstance() | 没有无参构造会报错 |
获取字段 | clazz.getFields() clazz.getField(字段名) clazz.getDeclaredFields() clazz.getDeclaredField(字段名) |
带 Declared:能获取私有、但不包括继承 不带 Declared:只能获取 public,但包括继承 |
获取方法 | clazz.getMethods() clazz.getMethod(方法名, 可变参数) clazz.getDeclaredMethods() clazz.getDeclaredMethod(方法名, 可变参数) |
参数是可变参数,可传任意类型的 classclazz.getMethod("draw", int.class, String.class) |
Field 常用 API
作用 | 方法 | 说明 |
---|---|---|
暴力反射 | setAccessible(true) | private 字段不能调用 get 和 set,暴力反射后可以 |
修改属性值 | set(目标对象, 值) | 对于 final 字段不会报错,但实际上该字段的值不会改变 |
获取属性值 | get(目标对象) | |
获取属性名称 | getName() | |
获取属性类型 | getType() | 是一个 Class 对象 |
属性是否是枚举 | isEnumConstant() |
Method 常用 API
方法 | 作用 | |
---|---|---|
执行方法 | invoke(目标对象, 可变参数) | |
获取方法返回值 | getReturnType() | 是一个 Class 对象 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具