通过反射修改指定对象字段值的通用方法

来源:互联网 发布:屏幕录制软件免费版 编辑:程序博客网 时间:2024/06/05 14:30
package question5;import java.lang.reflect.Field;/* * 第五题 * 写一个方法,public void setProperty(Object obj, String propertyName, Object value){}, * 此方法可将obj对象中名为propertyName的属性的值设置为value。 *  *  */public class SetObjectProperty{public static void main(String[] args) throws Exception{A obj = new A();//将对象中的a变量赋值为5,默认为0setProperty(obj, "a", 5);//输出a的值System.out.println(obj.a);//将对象中的b变量赋值为10.默认为5setNotAccessibleProperty(obj, "b", 10);//输出b的值System.out.println(obj.b);}/** * 对给定对象obj的propertyName指定的成员变量进行赋值 * 赋值为value所指定的值 *  * 该方法不能访问私有成员 */public static void setProperty(Object obj, String propertyName, Object value) throws Exception{Class<?> clazz = obj.getClass();Field field = clazz.getField(propertyName);field.set(obj, value);}/** * 对给定对象obj的propertyName指定的成员变量进行赋值 * 赋值为value所指定的值 *  * 该方法可以访问私有成员 */public static void setNotAccessibleProperty(Object obj, String propertyName, Object value) throws Exception{Class<?> clazz = obj.getClass();Field field = clazz.getDeclaredField(propertyName);//赋值前将该成员变量的访问权限打开field.setAccessible(true);field.set(obj, value);//赋值后将该成员变量的访问权限关闭field.setAccessible(false);}//用来测试的类public static class A{public int a = 0;private int b = 5;}}

原创粉丝点击