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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王浩龙 中级黑马   /  2014-3-18 14:44  /  1187 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. import java.beans.IntrospectionException;
  2. import java.beans.PropertyDescriptor;
  3. import java.lang.reflect.InvocationTargetException;
  4. import java.lang.reflect.Method;

  5. /**
  6. * 第三题:3、 写一个方法,此方法可将obj对象中名为propertyName的属性的值设置为value.  
  7. *  public void setProperty(Object obj, String propertyName, Object value){   
  8. *  }
  9. * @author Administrator
  10. *
  11. */

  12. public class Test3 {
  13.         public void setProperty(Object obj, String propertyName, Object value) throws Exception{
  14.                 //把obj对象当作javaBean来看,可以通过new PropertyDescriptor(propertyName, obj.getClass())得到想对于propertyName的属性
  15.                 PropertyDescriptor pd = new PropertyDescriptor(propertyName, obj.getClass());
  16.                 Method setPropertyName = pd.getWriteMethod();//用属性中得到写的方法得到setXxx方法
  17.                 setPropertyName.invoke(obj, value);//调用setXxx的invoke方法改变obj对象propertyName的值为value
  18.         }
  19. }
复制代码

上面这道题中如果,obj对象中没有关于propertyName的属性的setXxx方法怎么办?

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

3 个回复

倒序浏览
是这样的,真正的概念要说清楚的话字段和属性是不一样的,我们写了一个类,有一些成员变量,但是如果这些变量没有get ,set方法的话,只能称为字段而不能称为属性,所以在你的疑问中如果那个变量没有set方法,那么他就根本不是属性,也就谈不上为属性赋值了

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
在BS架构中,从页面前端的数据传到服务器的数据是封装在JavaBean中的,假如在这个java中的某个成员变量没有set get方法的话,在服务端是得不到相应的数据的,也就是说服务端获取某个字段数据就是根据该字段是否有set get方法
回复 使用道具 举报
本帖最后由 e.c 于 2014-3-19 20:39 编辑

通过Class这个入口可以拿类的Fields字段。可以获有类的所取字段。获取到后可以对具体对象操作。比如获取对象字段的值或给其赋值。如果是private的话。暴力反射。

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马