老师,获得所有成员变量怎么使用?

来源: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()设置。

如果同学想设置属性可以被访问,并且设置值,建议同学获取单个属性并设置。

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~

0

0 学习 · 8016 问题

查看课程