反射
来源:互联网 发布:4k电视直播软件 编辑:程序博客网 时间:2024/06/06 00:30
反射:破坏了类的封装性,但有不得不说他可以是任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能就是反射。
public class Student { private String name; private int age; private String address; private long registTime; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public long getRegistTime() { return registTime; } public void setRegistTime(long registTime) { this.registTime = registTime; } @Override public String toString() { return "Student{" + "name='" + name + '\'' + ", age=" + age + ", address='" + address + '\'' + ", registTime=" + registTime + '}'; }}
public static void main(String[] args) { Student stu1=new Student(); stu1.setName("sxl"); stu1.setAge(26); stu1.setAddress("中国"); long time=System.currentTimeMillis(); stu1.setRegistTime(time); reflectBo.getStudentInfo(stu1); }
//读取私有属性值 public static void getStudentInfo(Object obj){ PropertyDescriptor pd=null; Field[] prifields=obj.getClass().getDeclaredFields();//获取该类的私有属性// Field[] pubfields=cls.getFields();//获取该类及其父类的共有属性。 for(Field field:prifields){ //循环遍历获取字段字段// field.setAccessible(true); //设置是否可以访问私有属性 try {// System.out.println(field.get(obj)); //直接获取对象属性的值。(不推荐使用) pd = new PropertyDescriptor(field.getName(), obj.getClass()); //获取属性字段对应的get,set方法 Method getMethod=pd.getReadMethod(); //获取get方法 Object retValue = getMethod.invoke(obj); //代理当前属性对应的get方法。 System.out.println(retValue); } catch (Throwable e) { e.printStackTrace(); } } }
public static void main(String[] args) { Student stu2=new Student(); long time=System.currentTimeMillis(); Map<String,Object> map=new HashMap<String,Object>(); map.put("name","xiaolin"); map.put("age",27); map.put("address","河北"); map.put("registTime",time); reflectBo.setStudentInfo(stu2,map); }
//设置私有属性值 public static void setStudentInfo(Object obj, Map<String,Object> map){ PropertyDescriptor pd=null; Field[] prifields=obj.getClass().getDeclaredFields();//获取该类的私有属性 for(Field field:prifields){ //循环遍历获取字段字段 try { field.setAccessible(true);//是否可以访问私有属性 pd = new PropertyDescriptor(field.getName(), obj.getClass()); //获取属性字段对应的get,set方法 Method setMethod=pd.getWriteMethod(); //获取get方法 if(map.containsKey(field.getName())){ setMethod.invoke(obj,map.get(field.getName())); } } catch (Throwable e) { e.printStackTrace(); } } System.out.println(obj.toString()); }
阅读全文
0 0
- 反射
- 反射
- 反射
- 反射
- 反射
- 反射
- 反射
- 反射
- 反射
- 反射
- 反射
- 反射
- 反射
- 反射
- 反射
- 反射
- 反射
- 反射
- 三角形兼梯形布局
- Oracle11g安装问题汇总
- 初学JAVA笔记(一)
- Quartz-JobDetail和Trigger-Job
- SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
- 反射
- win10 离线安装.net framework 3.5并且无法安装错误代码0x800F081F
- Mysql存储过程
- Rust出品:FireFox Quantum浏览器下载试用
- Spark RDD操作总结
- 二叉树的最小深度
- [小菜鸡学unity3D] 如何简单的制作游戏技能CD效果
- Mysql数据库操作(七)----子查询练习
- 利用urllib,正则表达式,文件读写,爬取慕课网首页图片