泛型反射到DTO的问题,请教大家。

zhuangwei_ 2010-08-05 11:13:42
流程是这样的:
1.从数据库取出数据放到List<dummyDto>里面。
2.将1.取得的数据作为参数传到doDownLoadInfo方法里,为了识别dto种类,我的想法是同时传一个dto.class作为参数。
问题:怎么样能够把listInfo的数据拿出来使用呢?


// dto
public class dummyDto {
private String commodityIndex;
private String commodityName;
// ... 省略
}


// 业务逻辑
List<dummyDto> dto = "数据库取得数据";
doDownLoadInfo(dto, dummyDto.class);


// 共通方法
public <T> List<T> doDownLoadInfo(List<T> listInfo, Class<T> dtoClass) {
// TODO listInfo该怎么使用呢???
}
...全文
262 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhuangwei_ 2010-08-05
  • 打赏
  • 举报
回复
我是楼主。
哎,目前我觉得Method[] methods = dtoClass.getMethods();这一步就能够取得get方法,也就是能取得值,但是在这之前应该做什么处理,我没研究出来。。
zhuangwei_ 2010-08-05
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 e9876 的回复:]
Java code

for(Object obj:listInfo){
//如果能直接用field来取出数值的话:
Field f = dtoClass.getField(参数名称);
Object value = f.get(obj);
//如果需要使用get方法来取数值的话:
Method m = dtoClass.getMethod(方法名称, 方法参数的……
[/Quote]

我并不知道dto里面的变量名称,所以此方法应该不行。
我只需要能够取到值就好。
zhuangwei_ 2010-08-05
  • 打赏
  • 举报
回复
回3楼的,List<dummyDto> dto=(List<dummyDto>)listInfo;原则上我是想实现这一步。但是我传进来的泛型。其实也就是想把泛型dto转成你代码所写的那种,但我觉得这应该是不可能的。我觉得只能够把dto的元素按顺序取出来然后利用。

补充一点,其实我并不需要知道泛型dto每个元素的字段名,只要能够取到值就行。
closewbq 2010-08-05
  • 打赏
  • 举报
回复
[Quote=引用楼主 zhuangwei_ 的回复:]
流程是这样的:
1.从数据库取出数据放到List<dummyDto>里面。
2.将1.取得的数据作为参数传到doDownLoadInfo方法里,为了识别dto种类,我的想法是同时传一个dto.class作为参数。
问题:怎么样能够把listInfo的数据拿出来使用呢?


Java code

// dto
public class dummyDto {
private……
[/Quote]

有点迷糊!

// 业务逻辑
List<dummyDto> dto = "数据库取得数据";
doDownLoadInfo(dto, dummyDto.class);


@SuppressWarnings("unchecked")
public void doDownLoadInfo(List<?> listInfo, Class<?> dtoClass) {
if(dtoClass==dummyDto.class){
List<dummyDto> dto=(List<dummyDto>)listInfo;
//然后操作dto
}
}
想这么用?
e9876 2010-08-05
  • 打赏
  • 举报
回复
汗。笔误

Object value = m.invoke(obj, 方法参数的CLASS);

这个应该是

Object value = m.invoke(obj, 方法参数的值);
e9876 2010-08-05
  • 打赏
  • 举报
回复

for(Object obj:listInfo){
//如果能直接用field来取出数值的话:
Field f = dtoClass.getField(参数名称);
Object value = f.get(obj);
//如果需要使用get方法来取数值的话:
Method m = dtoClass.getMethod(方法名称, 方法参数的CLASS..);
Object value = m.invoke(obj, 方法参数的CLASS);

}

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧