反射Field
来源:互联网 发布:三少爷的剑 知乎 编辑:程序博客网 时间:2024/05/16 14:10
1.几种方法
a)Class.getDeclaredField(String name);
返回一个 Field 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明字段。 b)Class.getDeclaredFields(); 返回 Field 对象的一个数组,这些对象反映此 Class 对象所表示的类或接口所声明的所有字段。c)Class.getField(String name); 返回一个 Field 对象,它反映此 Class 对象所表示的类或接口的指定公共成员字段。d)Class.getField(); 返回一个包含某些 Field 对象的数组,这些对象反映此 Class 对象所表示的类或接口的所有可访问公共字段。
2.下面是一个测试列子
实体类:
import java.util.Date;/** * @ClassName: Student * @Description: 学生实体 * @author JoseanLuo * @date 2014-3-18 下午5:17:35 * @version V1.0 */public class Student{ private Long id; private String name; private Date createdate; private String no; public String nickname;public Long getId(){ return id;}public void setId(Long id){ this.id = id;}public String getName(){ return name;}public void setName(String name){ this.name = name;}public Date getCreatedate(){ return createdate;}public void setCreatedate(Date createdate){ this.createdate = createdate;}public String getNo(){ return no;}public void setNo(String no){ this.no = no;}public String getNickname(){ return nickname;}public void setNickname(String nickname){ this.nickname = nickname;}}
测试类:
import java.lang.reflect.Field;import java.util.Date;/** * @ClassName: ReflectFieldTest * @Description: 反射Field测试。 * @author JoseanLuo * @date 2014-3-18 下午5:16:17 * @version V1.0 */public class ReflectFieldTest{ public static void main(String[] args){ Student stu=new Student(); stu.setId(1L); stu.setName("Josean"); stu.setNo("201403185203344"); stu.setCreatedate(new Date()); try { Field property1=stu.getClass().getDeclaredField("name"); System.out.println(property1);//private java.lang.String com.cx.test.Student.name Field property3=stu.getClass().getField("nickname"); System.out.println(property3);//public java.lang.String com.cx.test.Student.nickname //错误方法 getField系列方法只能获取公共字段 //Field property2=stu.getClass().getField("name"); //System.out.println(property2); //会抛java.lang.NoSuchFieldException } catch (SecurityException e) { e.printStackTrace(); } catch (NoSuchFieldException e) { e.printStackTrace(); }}}
3.进行属性获取更改
得到这个Field之后你就可以获取他的值或者设置他的值了。 获取他的值用get类型方法,他针对常见类型提供了对应get方法,这里就不一一列举了。 值得注意的是获取私有属性的时候必须先设置Accessible为true,然后才能获取。 同理设置的时候调用set类型方法,这里也不一一列举了,下面放代码。 import java.lang.reflect.Field;import java.util.Date;/** * @ClassName: ReflectFieldTest * @Description: 反射Field测试。 * @author JoseanLuo * @date 2014-3-18 下午5:16:17 * @version V1.0 */public class ReflectFieldTest{ public static void main(String[] args) throws Exception{ Student stu=new Student(); stu.setId(1L); stu.setName("Josean"); stu.setNo("201403185203344"); stu.setCreatedate(new Date()); stu.setNickname("copyman"); Field property1=stu.getClass().getDeclaredField("name"); //System.out.println(property1);//out:private java.lang.String com.cx.test.Student.name Field property3=stu.getClass().getField("nickname"); System.out.println(property3.get(stu)); //System.out.println(property3);//out:public java.lang.String com.cx.test.Student.nickname //错误方法 getField系列方法只能获取公共字段 //Field property2=stu.getClass().getField("name"); //System.out.println(property2); //会抛java.lang.NoSuchFieldException Field [] prFields4=stu.getClass().getDeclaredFields(); for(Field field:prFields4) { System.out.println(field); System.out.println(field.equals(property1)); //私有变量必须先设置Accessible为true field.setAccessible(true); //获取用get类方法。 System.out.println(field.get(stu)); } //设置用set类方法 property3.set(stu, "名字被我改了,哈哈"); System.out.println(stu.getNickname());}}
这个是控制台输出:
copymanprivate java.lang.Long com.cx.test.Student.idfalse1private java.lang.String com.cx.test.Student.nametrueJoseanprivate java.util.Date com.cx.test.Student.createdatefalseTue Mar 18 18:19:39 CST 2014private java.lang.String com.cx.test.Student.nofalse201403185203344public java.lang.String com.cx.test.Student.nicknamefalsecopyman名字被我改了,哈哈
这是转载的别人的博客,加深一下认识。
0 0
- 反射--Field
- 反射-Field
- 反射Field
- Java 反射机制[Field反射]
- 反射-Field类
- java 反射 Field
- “Field”与反射知识
- java 反射 Field类
- Field反射修改值
- java 反射 Field类
- java 反射 Field类
- 反射之Field
- java 反射 Field类
- java 反射 Field类
- 反射机制总结----Field
- JAVA反射Field使用
- 反射机制----Field
- 反射机制--Field
- mahout中a读e--学习笔记
- docker安装telnet 命令【官方文档】
- 使用dg迁移32位oracle到64位oracle
- JAVA远程session访问,访问独立SESSION服务器
- unity在模型上绘画
- 反射Field
- 正则表达式
- java对list集合使用comparator方法比较排序
- mysql 利用binlog增量备份,还原实例(日志备份数据库)
- Android系统中GPS原始数据
- Maven私服Nexus详解
- 欢迎使用CSDN-markdown编辑器
- Extjs6.0 输入框单位的实现
- 图像纹理特征总体简述