Class cls=Class.forName("accp.jsj.gm.pojo.FoodInfo");
Field[] fields=cls.getDeclaredFields();
for (int i = 0; i < fields.length; i++) {
Field fld = fields[i];
fld.setAccessible(true);
Object value=map.get(fld.getName());
if(fld.getType().toString().equals("class java.lang.Double"))
fld.set(foodInfo,Double.parseDouble(value.toString()));
else
fld.set(foodInfo,value);
大家帮我看下反射得到JavaBean的时候能不能不判断字段类型
直接 赋值的   ?
谢谢

解决方案 »

  1.   

    当然能了。
    @SuppressWarnings("unchecked")
    public static Object formatObject(HttpServletRequest request,
    String className) throws Exception {
    Object object = Class.forName(className).newInstance();
    Class classType = object.getClass();
    Field[] fields = classType.getDeclaredFields();
    for (Field field : fields) {
    String fieldName = field.getName();
    Object value = request.getParameter(className);
    String methodName = "set" + fieldName.substring(0, 1).toUpperCase()
    + fieldName.substring(1);
    Method setterMethod = classType.getMethod(methodName,
    new Class[] { field.getType() });
    if (value != null && !"".equals(value) && "" != value
    && setterMethod != null) {
    if (field.getType().toString().equals("class java.lang.Double")) {
    setterMethod.invoke(object, new Object[] { Double
    .parseDouble(value.toString()) });
    } else if (field.getType().toString().equals(
    "class java.lang.Integer")) {
    setterMethod.invoke(object, new Object[] { Integer
    .parseInt(value.toString()) });
    } else if (field.getType().toString().equals(
    "class java.lang.Long")) {
    setterMethod.invoke(object, new Object[] { Long
    .parseLong(value.toString()) });
    } else if (field.getType().toString().equals(
    "class java.lang.Float")) {
    setterMethod.invoke(object, new Object[] { Float
    .parseFloat(value.toString()) });
    } else {
    setterMethod.invoke(object, new Object[] { value });
    }
    } } return object;
    }
      

  2.   

    @SuppressWarnings("unchecked")
    public static Object formatObject(HttpServletRequest request,
    String className) throws Exception {
    Object object = Class.forName(className).newInstance();
    Class classType = object.getClass();
    Field[] fields = classType.getDeclaredFields();
    for (Field field : fields) {
    String fieldName = field.getName();
    Object value = request.getParameter(className);
    String methodName = "set" + fieldName.substring(0, 1).toUpperCase()
    + fieldName.substring(1);
    Method setterMethod = classType.getMethod(methodName,
    new Class[] { field.getType() });
    if (value != null && !"".equals(value) && "" != value
    && setterMethod != null) {
    if (field.getType().toString().equals("class java.lang.Double")) {
    setterMethod.invoke(object, new Object[] { Double
    .parseDouble(value.toString()) });
    } else if (field.getType().toString().equals(
    "class java.lang.Integer")) {
    setterMethod.invoke(object, new Object[] { Integer
    .parseInt(value.toString()) });
    } else if (field.getType().toString().equals(
    "class java.lang.Long")) {
    setterMethod.invoke(object, new Object[] { Long
    .parseLong(value.toString()) });
    } else if (field.getType().toString().equals(
    "class java.lang.Float")) {
    setterMethod.invoke(object, new Object[] { Float
    .parseFloat(value.toString()) });
    } else {
    setterMethod.invoke(object, new Object[] { value });
    }
    } } return object;
    }