应用反射时的一个小问题

springlie 2009-03-15 12:36:42
今天刚刚接触了一小点反射。有个小问题。请教大家。
daoClass = Class.forName(daoClassName);//这里是用反射获取一个类名,和它的一个方法
Class methodParameterTypes[] = new Class[1];
methodParameterTypes[0] = Integer.TYPE;
Method targetMethodInfo = daoClass.getMethod("findById", methodParameterTypes);

如上所述,用反射调用的是一个hibernate自动生成的DAO类的一个方法:
	public TblPotential findById(java.lang.Integer id) {
log.debug("getting TblPotential instance with id: " + id);
try {
TblPotential instance = (TblPotential) getSession().get(
"com.minicrm.hibernate.tables.TblPotential", id);
return instance;
} catch (RuntimeException re) {
log.error("get failed", re);
throw re;
}
}


结果测试时说找不到这个方法。后来我发觉DAO类中findById()的参数是一个Interger,而通过反射调用的方法findById()的参数是int,所以导致无法找到。
后来我在DAO类中又加了一个方法:
	public TblPotential findById(int id){
return findById(id);
}

测试通过。

问题是:我现在不想改动DAO类,请问在反射那里的语句通过怎样可以找到findById(java.lang.Integer id)方法?
...全文
66 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
springlie 2009-03-15
  • 打赏
  • 举报
回复
谢谢楼上,已测可行。
心中还有一个小疑问。因为我以为反射的时候传的参数类型本来就是一个Integer(上例中的methodParameterTypes)啊,为何它会自动转换成int呢?
tiantianzzz 2009-03-15
  • 打赏
  • 举报
回复
你为啥要用Integer.TYPE呢 ? 用这个当然是int的Class对象了
直接用Integer.class不就好了么...
tiantianzzz 2009-03-15
  • 打赏
  • 举报
回复
:) 我刚也是翻了下API才知道Integer.TYPE 是int的Class对象 一起学习了 呵呵
springlie 2009-03-15
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 springlie 的回复:]
谢谢楼上,已测可行。
心中还有一个小疑问。因为我以为反射的时候传的参数类型本来就是一个Integer(上例中的methodParameterTypes)啊,为何它会自动转换成int呢?
[/Quote]
已经明白了,无须回答了,结贴,谢谢。

67,512

社区成员

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

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