今天刚刚接触了一小点反射。有个小问题。请教大家。
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)方法?
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)方法?
解决方案 »
- eclipse如何提取方法前面的注释,并把注释导入到excel文件中
- 运行J2EE项目报HTTP Status 404错误,急!!
- 怎么删JAR包啊~~
- 为什么要用junit进行测试
- 帮忙解决一下浏览器兼容问题
- java.lang.IndexOutOfBoundsException: Remember that ordinal parameters are 1-base
- -----请问哪里有WebService的视频教程,我是初学者,希望大家多多帮忙,不要西安交通大学的。
- 又是乱码问题!急死人了!
- 不通过dsn怎样连接数据库呢?
- 一个基础问题 考考你的基本功 大家不运行代码 看看return 返回的是什么
- FLEX+hibernate 进行多对一级联插入时无进行插入主表数据???
- 给一个J2EE技术火的理由?是传说中的那样吗
直接用Integer.class不就好了么...
心中还有一个小疑问。因为我以为反射的时候传的参数类型本来就是一个Integer(上例中的methodParameterTypes)啊,为何它会自动转换成int呢?