首页 > 代码库 > field 属性操作
field 属性操作
首先必须明一点 Field类主要是用来辅助获取和操作类的属性的!
1.怎么通过反射获取类的属性
先来看JDK提供的方法有如下几种:
a)Class.getDeclaredField(String name);
返回一个
Field
对象,该对象反映此 Class
对象所表示的类或接口的指定已声明字段。
b)Class.getDeclaredFields();
返回
Field
对象的一个数组,这些对象反映此 Class
对象所表示的类或接口所声明的所有字段。
c)
Class.getField(String name)
;
返回一个
Field
对象,它反映此 Class
对象所表示的类或接口的指定公共成员字段。
d)
;Class.getField()
返回一个包含某些 Field
对象的数组,这些对象反映此 Class
对象所表示的类或接口的所有可访问公共字段。
来一个例子来说明一下 :
实体类:
1 import java.util.Date; 2 /** 3 * @ClassName: Student 4 * @Description: 学生实体 5 * @author JoseanLuo 6 * @date 2014-3-18 下午5:17:35 7 * @version V1.0 8 */ 9 public class Student 10 { 11 private Long id; 12 private String name; 13 private Date createdate; 14 private String no; 15 public String nickname; 16 public Long getId() 17 { 18 return id; 19 } 20 public void setId(Long id) 21 { 22 this.id = id; 23 } 24 public String getName() 25 { 26 return name; 27 } 28 public void setName(String name) 29 { 30 this.name = name; 31 } 32 public Date getCreatedate() 33 { 34 return createdate; 35 } 36 public void setCreatedate(Date createdate) 37 { 38 this.createdate = createdate; 39 } 40 public String getNo() 41 { 42 return no; 43 } 44 public void setNo(String no) 45 { 46 this.no = no; 47 } 48 public String getNickname() 49 { 50 return nickname; 51 } 52 public void setNickname(String nickname) 53 { 54 this.nickname = nickname; 55 } 56 57 }
测试类:
1 import java.lang.reflect.Field; 2 import java.util.Date; 3 /** 4 * @ClassName: ReflectFieldTest 5 * @Description: 反射Field测试。 6 * @author JoseanLuo 7 * @date 2014-3-18 下午5:16:17 8 * @version V1.0 9 */ 10 public class ReflectFieldTest 11 { 12 13 public static void main(String[] args) 14 { Student stu=new Student(); 15 stu.setId(1L); 16 stu.setName("Josean"); 17 stu.setNo("201403185203344"); 18 stu.setCreatedate(new Date()); 19 try 20 { 21 Field property1=stu.getClass().getDeclaredField("name"); 22 System.out.println(property1);//private java.lang.String com.cx.test.Student.name 23 Field property3=stu.getClass().getField("nickname"); 24 System.out.println(property3);//public java.lang.String com.cx.test.Student.nickname 25 //错误方法 getField系列方法只能获取公共字段 26 //Field property2=stu.getClass().getField("name"); 27 //System.out.println(property2); 28 //会抛java.lang.NoSuchFieldException 29 30 31 } catch (SecurityException e) 32 { 33 34 e.printStackTrace(); 35 } catch (NoSuchFieldException e) 36 { 37 38 e.printStackTrace(); 39 } 40 } 41 42 43 }
2.进行属性获取更改
得到这个Field之后你就可以获取他的值或者设置他的值了。
获取他的值用get类型方法,他针对常见类型提供了对应get方法,这里就不一一列举了。
值得注意的是获取私有属性的时候必须先设置Accessible为true,然后才能获取。
同理设置的时候调用set类型方法,这里也不一一列举了,下面放代码。
1 import java.lang.reflect.Field; 2 import java.util.Date; 3 /** 4 * @ClassName: ReflectFieldTest 5 * @Description: 反射Field测试。 6 * @author JoseanLuo 7 * @date 2014-3-18 下午5:16:17 8 * @version V1.0 9 */ 10 public class ReflectFieldTest 11 { 12 13 public static void main(String[] args) throws Exception 14 { Student stu=new Student(); 15 stu.setId(1L); 16 stu.setName("Josean"); 17 stu.setNo("201403185203344"); 18 stu.setCreatedate(new Date()); 19 stu.setNickname("copyman"); 20 Field property1=stu.getClass().getDeclaredField("name"); 21 //System.out.println(property1);//out:private java.lang.String com.cx.test.Student.name 22 Field property3=stu.getClass().getField("nickname"); 23 System.out.println(property3.get(stu)); 24 //System.out.println(property3);//out:public java.lang.String com.cx.test.Student.nickname 25 //错误方法 getField系列方法只能获取公共字段 26 //Field property2=stu.getClass().getField("name"); 27 //System.out.println(property2); 28 //会抛java.lang.NoSuchFieldException 29 Field [] prFields4=stu.getClass().getDeclaredFields(); 30 for(Field field:prFields4) 31 { 32 System.out.println(field); 33 System.out.println(field.equals(property1)); 34 //私有变量必须先设置Accessible为true 35 field.setAccessible(true); 36 //获取用get类方法。 37 System.out.println(field.get(stu)); 38 } 39 //设置用set类方法 40 property3.set(stu, "名字被我改了,哈哈"); 41 42 System.out.println(stu.getNickname()); 43 44 } 45 46 47 }
field 属性操作
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。