黑马程序员技术交流社区

标题: 为啥没有赋值?求分析~~ [打印本页]

作者: 泡沫__opt    时间: 2014-10-12 15:39
标题: 为啥没有赋值?求分析~~
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);
}
}

作者: void    时间: 2014-10-12 15:39
  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. }
复制代码

作者: 泡沫__opt    时间: 2014-10-12 18:56
大神们啊~~来个解决一下问题吧~~
作者: 泡沫__opt    时间: 2014-10-13 08:17
额……自己解决了……是我的System.out.println写到主函数上了……
我的setProperty()执行完后弹栈,所以在主函数里打印没结果……
作者: SenGoo    时间: 2014-10-21 16:24
好吧!来晚了!
作者: 泡沫__opt    时间: 2014-10-22 07:29
void 发表于 2014-10-21 20:53

额……抱歉啊……我没太搞明白你点评的意思……
作者: void    时间: 2014-10-22 10:03
泡沫__opt 发表于 2014-10-22 07:29
额……抱歉啊……我没太搞明白你点评的意思……

我感觉这道题的意思应该是修改传到setProperty里的实例,你写的是在setProperty里新建了一个对象,你传进去的实例根本就没改变
作者: 泡沫__opt    时间: 2014-10-22 13:21
void 发表于 2014-10-22 10:03
我感觉这道题的意思应该是修改传到setProperty里的实例,你写的是在setProperty里新建了一个对象,你传进 ...

意思问题不是出在System.out.println写到主函数上了?

作者: 泡沫__opt    时间: 2014-10-22 13:23
void 发表于 2014-10-22 10:03
我感觉这道题的意思应该是修改传到setProperty里的实例,你写的是在setProperty里新建了一个对象,你传进 ...

可是我按照我发现的问题改了之后也正确啊……
作者: void    时间: 2014-10-22 22:40
泡沫__opt 发表于 2014-10-22 13:21
意思问题不是出在System.out.println写到主函数上了?

不是-------------
作者: qinjingbo    时间: 2014-10-23 00:01
好难得样子啊。
作者: 泡沫__opt    时间: 2014-10-23 08:10
qinjingbo 发表于 2014-10-23 00:01
好难得样子啊。

别这样谦虚嘛~~
作者: 泡沫__opt    时间: 2014-10-23 08:27
void 发表于 2014-10-22 22:40
不是-------------

哦~~懂了~~谢谢大神指点啊~~
作者: 未来就在那    时间: 2014-10-28 12:59
看一看瞧一瞧
作者: Jeik    时间: 2014-11-3 21:48
class obj {
public String propertyName;
}
楼主你在这个类里面没有set和get这个属性方法。当你通过反射来调用方法当然调用不到呀!肯定是没有赋值呀!
作者: 计算机小菜鸟    时间: 2014-11-7 23:36
路过看看




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2