日期:2014-05-19  浏览次数:20890 次

Java反射,Int和Integet类型设置不成功,String可以设置
为什么我使用setXXX方法设置Int,Integer类型参数,不成功?哪位大侠来帮小弟一把!
代码:
/**
* 封装方法,用来获取javaBean内的每一个字段的set方法
* @param field 字段名称
* @param cla 对象的Class实例
* @param newObj 实体类的对象
* @param result 设置值的内容
* @return Object
*/
public void invokeMethod_set(Field field,Class<? extends Object> cla,Object newObj,Object result){
try{
//获取属性的名称并取出首字母,将其转化为大写
String firstName = field.getName().substring(0,1).toUpperCase();
//将属性的名称转化为标准格式的方法名称getXxx
String mname ="set"+firstName + field.getName().substring(1);
System.out.println(mname+" "+field.getType());
//获取实体类中的get方法名称
Method metodName = cla.getMethod(mname, field.getType());
System.out.println("值:"+result);
//执行方法
metodName.invoke(newObj, result);
}catch(Exception e){
logger.error(e);
}
}


/**
* 查询
* @param obj 传入实体类的对象
*/
public List<?> find(Object obj) {
List<Object> list= new ArrayList<Object>();
try{
Class<? extends Object> cla = obj.getClass();
Object tableName = invokeMethod(cla.getDeclaredField("tableName"), cla, obj);
Field fields[] = cla.getDeclaredFields();

ResultSet rs = getStatement().executeQuery(" Select * from "+tableName);
while(rs.next()){
//创建一个新的类型
Object newObj = cla.newInstance();
for (int i = 1; i < fields.length; i++) {
//System.out.println(rs.getObject(i));
//设置属性的值
invokeMethod_set(fields[i], cla, newObj,rs.getObject(i));
}
System.out.println(".....");
//把新创建的类存放到list内
list.add(newObj);
}
}catch(Exception e){
e.printStackTrace();
logger.error(e);
}
return list;
}


输出集合内容:
List<ProductTypeParent> list = (List<ProductTypeParent>)idao.find(new ProductTypeParent());
for (int i = 0; i < list.size(); i++) {
ProductTypeParent pTypeParent = list.get(i);
System.out.println(pTypeParent.getEpp_id()+" "+pTypeParent.getEpp_name());
}
结果:


null 图书音像
null 百货
null 服装
null 数码

------解决方案--------------------
只能debug看看调用metodName.invoke(newObj, result);之前result是什么
在调用之后可以打印field.get(newObj)看看是否设置正确

------解决方案--------------------
把 你的代码多给出来吧。。你这里实体也没给。