如何利用java的反射机制动态的取得对象的属性?

来源:互联网 发布:linux下svn服务器搭建 编辑:程序博客网 时间:2024/05/22 07:57

首先我们要先假设我们已经从前面把grid中的store数据项中的字段已经传递到后台中,这个就不用我在这里讲了吧?

前一篇文章我们已经说过这个问题了

 

这里所说的数据项即为dataIndex的值 ,这也是我们将来要进行反射的时候要用到的字段

先明确一下我们要做什么?

我们现在要做的就是把从数据库中查询出来的东西,我们这里用到的是hibernate,那么也就是说,我们查询出来的是一个一个的对象,然后利用get方法把对应的属性值拿到,再传递到前台的页面中。

那么,我们为什么要用到反射的机制呢?

想一下,如果在数据库中,这个对应的类中,有且不止这些个字段,会出现什么情况?

 

也就是说,从数据库中查询出的对象,你要把哪些个属性传递到前台?

这里是orgId,orgName……,但数据库中不仅仅是这些个字段,还有其它的字段,那么,我们采用反射的机制把要显示的出来,其它的列信息我们不用去管!!!

关键代码:

//连接数据库把符合条件的数据全部查询出来
        List list = this.easySysOrgService.findAll();
        Class classType = null;                              //初始化数据类型
        Object invokeTest = null; 
        for(int i=0; i<list.size(); i++){
                EasySysOrg eso = (EasySysOrg)list.get(i);  //得到每一个对象
            
               classType = eso.getClass();                //得到数据类型
               invokeTest = classType.newInstance();
            
                for(int k=0; k<str.length; k++){        //用前台传递的每一个dataIndex字段去和类的属性比较
                          String data = str[k];                //得到每一个字段值,如orgId,orgName……
               
                                       //第一个参数为getXXX   datasubString(0,1) 截取第一个字母,如orgId截取o再otUpperCase变成大写
                Method method = classType.getMethod("get" + data.substring(0, 1).toUpperCase() + data.substring(1, data.length()), new Class[]{});
                Object result = method.invoke(eso, new Object[]{});
               
                System.out.println("method:____" + method);
            }
           
        }

运行的结果为:

 

 

 

 

 

 

 

 

 

原创粉丝点击