您的位置:首页 > 编程语言 > Java开发

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

2011-03-25 00:00 846 查看
首先我们要先假设我们已经从前面把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);
}

}

运行的结果为:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: