老师,获得所有成员变量怎么使用?
来源: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()设置。
如果同学想设置属性可以被访问,并且设置值,建议同学获取单个属性并设置。
如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~
相似问题