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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 泡沫__opt 中级黑马   /  2014-10-12 15:39  /  4005 人查看  /  16 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

2黑马币
package com.itheima;
import java.lang.reflect.Field;
/*
* 2、 写一个方法,此方法可将obj对象中名为propertyName的属性的值设置为value.   
public void setProperty(Object obj, String propertyName, Object value){   
}
*/
class obj {
public String propertyName;
}
public class Test2 {
public static void setProperty(Object obj, String propertyName, Object value)
    throws IllegalArgumentException, IllegalAccessException,
    NoSuchFieldException, SecurityException, InstantiationException {
   Class clazz = obj.getClass();
   Field f = clazz.getDeclaredField(propertyName);
   obj o = (obj)clazz.newInstance();
   f.set(o, value);
}
public static void main(String[] args) throws IllegalArgumentException,
    IllegalAccessException, NoSuchFieldException, SecurityException,
    InstantiationException {
   obj o = new obj();
   setProperty(o, "propertyName",  "vlaue");
   System.out.println(o.propertyName);
}
}

最佳答案

16 个回复

倒序浏览
  1. import java.lang.reflect.Field;

  2. /*
  3. * 2、 写一个方法,此方法可将obj对象中名为propertyName的属性的值设置为value.   
  4. public void setProperty(Object obj, String propertyName, Object value){   
  5. }
  6. */
  7. class Obj {
  8.         public String propertyName;
  9.        
  10. }

  11. public class Test2 {
  12.         public static void setProperty(Object obj, String propertyName, Object value)
  13.                         throws Exception {
  14.                 Obj o=(Obj) obj;
  15.                 Class clazz = o.getClass();
  16.                 Field f = clazz.getDeclaredField(propertyName);
  17.                 System.out.println(f.toString());
  18.                 f.set(o, value);
  19.                 System.out.println(o.propertyName);
  20.         }

  21.         public static void main(String[] args) throws Exception {
  22.                 Obj o = new Obj();
  23.                 setProperty(o, "propertyName", "vlaue");
  24.                 System.out.println(o.propertyName);
  25.         }
  26. }
复制代码

点评

obj o = (obj)clazz.newInstance();这句的0是一个新的对象实例对MAIN函数的o没影响 f.set(o, value);  发表于 2014-10-21 20:55
回复 使用道具 举报
大神们啊~~来个解决一下问题吧~~
回复 使用道具 举报
额……自己解决了……是我的System.out.println写到主函数上了……
我的setProperty()执行完后弹栈,所以在主函数里打印没结果……
回复 使用道具 举报
好吧!来晚了!
回复 使用道具 举报

额……抱歉啊……我没太搞明白你点评的意思……
回复 使用道具 举报
void 中级黑马 2014-10-22 10:03:57
7#
泡沫__opt 发表于 2014-10-22 07:29
额……抱歉啊……我没太搞明白你点评的意思……

我感觉这道题的意思应该是修改传到setProperty里的实例,你写的是在setProperty里新建了一个对象,你传进去的实例根本就没改变
回复 使用道具 举报
void 发表于 2014-10-22 10:03
我感觉这道题的意思应该是修改传到setProperty里的实例,你写的是在setProperty里新建了一个对象,你传进 ...

意思问题不是出在System.out.println写到主函数上了?
回复 使用道具 举报
void 发表于 2014-10-22 10:03
我感觉这道题的意思应该是修改传到setProperty里的实例,你写的是在setProperty里新建了一个对象,你传进 ...

可是我按照我发现的问题改了之后也正确啊……
回复 使用道具 举报
void 中级黑马 2014-10-22 22:40:52
10#
泡沫__opt 发表于 2014-10-22 13:21
意思问题不是出在System.out.println写到主函数上了?

不是-------------
回复 使用道具 举报
好难得样子啊。
回复 使用道具 举报

别这样谦虚嘛~~
回复 使用道具 举报

哦~~懂了~~谢谢大神指点啊~~
回复 使用道具 举报
看一看瞧一瞧
回复 使用道具 举报
Jeik 中级黑马 2014-11-3 21:48:49
15#
class obj {
public String propertyName;
}
楼主你在这个类里面没有set和get这个属性方法。当你通过反射来调用方法当然调用不到呀!肯定是没有赋值呀!
回复 使用道具 举报
路过看看
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马