老师,获得所有成员变量怎么使用?
来源:3-5 Field类的概述和使用
彤宝贝
2019-10-14 17:48:06
package com.ht.reflect.test; import java.lang.reflect.Field; import org.junit.Test; public class FiledTest { @Test public void demo1() throws Exception { //获得Class Class c1 = Class.forName("com.ht.reflect.test.Person"); //获得属性 Field field = c1.getField("name"); //操作属性 Person p = (Person) c1.newInstance(); field.set(p, "Demo"); Object obj = field.get(p); System.out.println(obj); } @Test /** * 反射私有属性 */ public void demo2() throws Exception { //获得CLass Class sc = Class.forName("com.ht.reflect.test.Person"); //获得属性 Field field = sc.getDeclaredField("sex"); //操作属性 Person p =(Person) sc.newInstance(); field.setAccessible(true); field.set(p, "男"); //获得属性 Object obj = field.get(p); System.out.println(p); System.out.println(obj); } public void demo3() throws Exception { //获得CLass Class cs = Class.forName("com.ht.reflect.test.Employee"); //获得属性 Field[] field = cs.getDeclaredFields();//"id","name","dep","salary","sex" //操作属性 Employee emp = (Employee)cs.newInstance(); //为什么不可以使用field.setAccessible(true); //和后面添加属性的操作? } }
package com.ht.reflect.test; /** * com.ht.reflect.test.ClassTest2 * @author 24516 * */ public class Employee { private int id;//员工编号 private String name;//员工姓名 private String dep;//员工所属部门 private float salary;//员工工资 private String sex;//员工性别 public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getDep() { return dep; } public void setDep(String dep) { this.dep = dep; } public float getSalary() { return salary; } public void setSalary(float salary) { this.salary = salary; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } @Override public String toString() { return "ClassTest2 [id=" + id + ", name=" + name + ", dep=" + dep + ", salary=" + salary + ", sex=" + sex + "]"; } public Employee(int id, String name, String dep, float salary, String sex) { super(); this.id = id; this.name = name; this.dep = dep; this.salary = salary; this.sex = sex; } public Employee() { super(); // TODO Auto-generated constructor stub } public void display() { System.out.println(toString()); } }
1回答
好帮手慕阿满
2019-10-14
同学你好,field.setAccessible(true);是设置属性是否可以被访问到,但是Field[] field = cs.getDeclaredFields();获取到的是属性的数组,field.setAccessible(true);无法对数组类型字段调用setaccessible()设置。
如果同学想设置属性可以被访问,并且设置值,建议同学获取单个属性并设置。
如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~
相似问题