A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘德坤 中级黑马   /  2015-10-20 21:23  /  408 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

package com.itheima;

import java.lang.reflect.Field;

/**
* 1、 写一个方法,此方法可将obj对象中名为propertyName的属性的值设置为value. public void
* setProperty(Object obj, String propertyName, Object value){ }
*
* @author 张兆晖
*                         思路:
*                                 创建一个工具类Tool,写一个方法,可将obj对象中名为propertyName的属性的值设置为value.
*                                 接着自定义一个类,成员变量一个用private修饰
*                                 然后测试给成员变量赋值
*
*/

public class Test1 {
        public static void main(String[] args) throws Exception {
                // 创建Person的对象
                Person p = new Person();
                // 创建Tool工具类的对象
                Tool t = new Tool();
                // 用setProperty()方法给Person类的两个成员变量赋值
                t.setProperty(p, "name", "张三");
                t.setProperty(p, "age", 27);

                System.out.println(p);
        }
}

// 创建一个工具类Tool
class Tool {
        // 写一个方法,可将obj对象中名为propertyName的属性的值设置为value.
        public void setProperty(Object obj, String propertyName, Object value)
                        throws Exception {
                // 根据对象获取字节码文件对象
                Class c = obj.getClass();
                // 获取该对象propertyName的成员变量
                Field field = c.getDeclaredField(propertyName);
                // 取消访问检查
                field.setAccessible(true);
                // 给对象的成员变量设定为指定的值
                field.set(obj, value);
        }

}

// 自动一个Person类
class Person {
        // name变量设为private
        private String name;
        // age变量设为public
        public int age;

        @Override
        // 重写一下toString方法.
        public String toString() {

                return name + "---" + age;
        }
}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马