黑马程序员技术交流社区

标题: 问一个入学测试的题吧,真心没搞明白目的要我干啥的 [打印本页]

作者: 月影箫风起k    时间: 2014-8-9 12:56
标题: 问一个入学测试的题吧,真心没搞明白目的要我干啥的
本帖最后由 月影箫风起k 于 2014-8-9 14:26 编辑

4、 写一个方法,此方法可将obj对象中名为propertyName的属性的值设置为value.
* public void setProperty(Object obj, String propertyName, Object value){   }好了就这样结束了,大家都说用反射了,那就用反射吧

作者: 舍我其谁    时间: 2014-8-9 13:00
路过,说实话,看了一下,真心不明白有什么目的,感觉应该不会像说的那么简单吧
作者: 陶圣虎    时间: 2014-8-9 13:10
这是希望用反射解决吗
作者: 不想飞不到    时间: 2014-8-9 13:10
是不是让你用局部变量value向this.value赋值?
this.value = value;
作者: 月影箫风起k    时间: 2014-8-9 13:22
不想飞不到 发表于 2014-8-9 13:10
是不是让你用局部变量value向this.value赋值?
this.value = value;

。。。谁知道啊,这题就这样完整的,看了半天不知道到底干嘛的
作者: 月影箫风起k    时间: 2014-8-9 13:26
陶圣虎 发表于 2014-8-9 13:10
这是希望用反射解决吗

谁知道啊题就这
作者: 반야_바라_밀    时间: 2014-8-9 13:26
真心感觉这个和反射有关,回头再看看视频吧。
作者: 月影箫风起k    时间: 2014-8-9 13:27
不想飞不到 发表于 2014-8-9 13:10
是不是让你用局部变量value向this.value赋值?
this.value = value;

那还要obj干嘛,另外话说value还是个对象。。。
作者: 陶圣虎    时间: 2014-8-9 13:29
月影箫风起k 发表于 2014-8-9 13:26
谁知道啊题就这

就是用反射啊。修改任意对象obj中的成员变量的值。视频里讲过这个
作者: 裤裆里的温柔、    时间: 2014-8-9 13:29
我也有这道题,我是这样写的
定义一个对象,包含值propertyName,可以是任意的基本数据类型,
定义一个 public void setProperty(Object obj, String propertyName, Object value){ 这里面用反射来改变变量值为value  }
把对象obj,原始值propertyName,新的值alue,传进去修改。解题没有绝对正确性仅供参考
作者: 月影箫风起k    时间: 2014-8-9 13:40
舍我其谁 发表于 2014-8-9 13:00
路过,说实话,看了一下,真心不明白有什么目的,感觉应该不会像说的那么简单吧 ...

不知道啥意思I
作者: 月影箫风起k    时间: 2014-8-9 13:42
裤裆里的温柔、 发表于 2014-8-9 13:29
我也有这道题,我是这样写的
定义一个对象,包含值propertyName,可以是任意的基本数据类型,
定义一个 pub ...

好吧,看来都用反射了,说实在的题都没读懂
作者: lcycr    时间: 2014-8-9 13:50
围观一下
作者: star5603    时间: 2014-8-9 13:51
让你写这么个方法,通过方法就可以对对象的这个属性设置对应的值
作者: 月影箫风起k    时间: 2014-8-9 13:58
star5603 发表于 2014-8-9 13:51
让你写这么个方法,通过方法就可以对对象的这个属性设置对应的值

好吧,貌似看懂了
作者: icris    时间: 2014-8-9 15:36
  1. public static void main(String[] args) {
  2.         String string = "abc";
  3.         String propertyNeme = "value";
  4.         char[] value = { 'a'};
  5.         setProperty(string, propertyNeme, value);
  6.         System.out.println(string);
  7. }

  8. private static void setProperty(Object obj, String propertyNeme, Object value) {
  9.         try {
  10.                 Field property = obj.getClass().getDeclaredField(propertyNeme);
  11.                 property.setAccessible(true);
  12.                 property.set(obj, value);
  13.         } catch (Exception e) {
  14.                 e.printStackTrace();
  15.         }
  16. }
复制代码

大概是这样吧
作者: 彬锐    时间: 2014-8-9 17:18
这个题目的意思就是   现在喊你写一个叫setProperty的方法  可以将一个obj对象 中的其中一个名为propertyName的字段里面的属性改写为value,用反射就可以了
作者: Bule丶    时间: 2014-8-9 17:49
是笔写还是用eclipse打啊
作者: jwx555    时间: 2014-8-9 19:08
我怎么觉得,题意已经够清楚了。
方法架子已经搭好,你只能写方法内容。

根据题意需要把obj对象里名为propertyName的属性值设置为value,你也许会想obj.propertyName=value就行

但是propertyName传过来的是字符串,这么做行不通,况且propertyName可能是age,也可能是name,不一定会是什么属性,根本没有obj.propertyName这样一种做法在Java里。

你唯一的出路就是反射
作者: 唕    时间: 2014-8-9 21:50
  1. import java.beans.PropertyDescriptor;
  2. import java.lang.reflect.Method;
  3. import java.lang.*;
  4. class Test
  5. {
  6.         public static void main(String[] args) throws Exception
  7.         {
  8.                 cc obj=new cc("eulav");
  9.                 setProperty(obj,"propertyName","value");
  10.                 System.out.println(obj.getPropertyName());
  11.         }
  12.         public static void setProperty(Object obj,String propertyName,Object value)throws Exception
  13.         {
  14.                 PropertyDescriptor pd=new PropertyDescriptor(propertyName,obj.getClass());
  15.                 Method method=pd.getWriteMethod();
  16.                 method.invoke(obj,value);
  17.                
  18.         }
  19. }
  20. class cc
  21. {
  22.         private String propertyName;
  23.         cc(String propertyName)
  24.         {
  25.                 this.propertyName=propertyName;
  26.         }
  27.         public String getPropertyName()
  28.         {
  29.                 return propertyName;
  30.         }
  31.         public void setPropertyName(String propertyName)
  32.         {
  33.                 this.propertyName=propertyName;
  34.         }
  35. }
复制代码

刚好看到在  求指教

作者: masai158    时间: 2014-8-10 10:08
  1.         public static void setPropertyName(Object obj,String fieldName,Object value) throws Exception
  2.         {
  3.                 Field fieldObj = obj.getClass().getField(fieldName);
  4.                 fieldObj.set(obj, value);
  5.         }
复制代码

个人感觉,应该就让你写这个。
作者: 逍遥客    时间: 2014-8-10 10:24
没看懂,再看视频把
作者: 思维    时间: 2014-8-10 15:47
这个是用反射获取方法,修改属性的值,张老师的视频有讲
作者: 陈新海1    时间: 2014-8-10 16:26
唕 发表于 2014-8-9 21:50
刚好看到在  求指教

真的是一个比一个厉害
作者: masai158    时间: 2014-8-10 18:05
我错了。应该是内省吧
作者: qiaosaifei    时间: 2016-1-16 10:33
新人走过




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