反射技术
来源:互联网 发布:java开发岗位职责 编辑:程序博客网 时间:2024/05/28 16:12
一反射常用API
获取对象
//类全名String className = "cn.itcast.Admin";//获取字节码文件Class<?> clazz = Class.forName(className);//创建对象 默认构造函数:clazz.newInstance() 不带参数的构造函数创建对象Constructor<?> constructor = clazz.getDeclaredConstructor(String.class);//带参数的构造函数constructor.newInstance("Jack");//调用带参数的构造函数创建对象
获取属性名称,值
//类全名String className = "cn.itcast.Admin";//获取字节码文件Class<?> clazz = Class.forName(className);//创建对象Admin admin = (Admin)clazz.newInstance();//获取所有的属性名称Field[] fs = clazz.getDeclaredFields();//遍历每一个属性for(Field f : fs){ //设置强制访问 f.setAccessible(true); //名称 String name = f.getName(); //值 f.get(admin);}
获取方法,调用方法
//类全名String className = "cn.itcast.Admin";//获取字节码文件Class<?> clazz = Class.forName(className);//创建对象Admin admin = (Admin)clazz.newInstance();//获取方法对象Method m = clazz.getDeclaredMethod("getId");//调用方法Object value = m.invoke(admin);
二 泛型的反射
作用:通过反射拿到泛型的实际类型
示例代码:
需求:拿到 public class BaseDao<Accoun> 中的Accoun字符串
//this 表示当前运行类//this.getClass() 获取当前运行类的字节码//this.getClass().getGenericSuperclass() 当前运行类的父类Type type = this.getClass().getGenericSuperclass();// 强制转换为“参数化类型” 【BaseDao<Account>】ParameterizedType pt = (ParameterizedType) type;// 获取参数化类型中,实际类型的定义 【Account.class】Type[] types = pt.getActualTypeArguments();// 获取数据的第一个元素:Accout.classClass clazz = (Class) types[0];//获取泛型的实际类名clazz.getSimpleName();
阅读全文
0 0
- 反射技术
- 反射技术
- 反射技术
- 反射技术
- 反射技术
- 反射技术
- 反射技术
- 反射技术
- 反射技术
- 反射技术
- 反射技术
- 反射技术
- 反射技术
- C++ 的“反射”技术
- .net反射技术
- 反射技术示例
- 初识.net反射技术
- 反射技术示例
- Wireshark抓包
- 基本类型和引用类型
- Makefile经典教程(掌握这些足够)
- 【转】TortoiseGit 保存密码
- python-识别图片-安装及配置:tesseract+pytesseract+Pillow
- 反射技术
- 输出100中数字的9的个数
- ubuntu下安装oracle数据库
- 浅谈财经视频直播行业发展现状和前景
- 【Scikit-Learn 中文文档】集成方法
- 《编程之美》中n&(n-1)的妙用
- 逆向常见函数
- mysql日期和字符串相互转换方法
- 分布式集群Kafka删除已经创建的topic