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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 尚志 中级黑马   /  2014-9-21 17:47  /  1020 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

package com.itheima;

import java.lang.reflect.Field;


/*
* 3、 写一个方法,此方法可将obj对象中名为propertyName的属性的值设置为value.   

public void setProperty(Object obj, String propertyName, Object value){   

}
* */
public class Test3 {

        public static void main(String[] args) {
                 M obj = new M();
                Method method = new Method();
                method.setProperty(obj, "propertyName", "你好");
        }

}
class Method{
        Class c = null;
        Field f = null;
        Object obj = null;
        public void setProperty(Object obj , String propertyName, Object value){
                this.obj =  obj;
                //获取obj对象的字节码
                c = obj.getClass();
                        System.out.println(c);
                        try {
                                Field f = c.getDeclaredField(propertyName);
                                System.out.println(f);
                        } catch (SecurityException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                        } catch (NoSuchFieldException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                        }
                        try {
                                f.set( obj, value);
                        } catch (IllegalArgumentException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                        } catch (IllegalAccessException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                        }
        }
}

class M{
         String propertyName = "shangzhipeng";
}

红色字体处出现java.lang.NullPointerException异常,怎么也调不对、、

4 个回复

倒序浏览
人呢?大神呢?
回复 使用道具 举报
反射,反射、、、
回复 使用道具 举报
把那段代码 放到第一个try语句里面试下
回复 使用道具 举报
没有给成员变量   Field f = null;赋值,Field f = c.getDeclaredField(propertyName); 这个是局部变量
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马