当前位置: 代码迷 >> J2EE >> 怎么动态调用javabean的set方法
  详细解决方案

怎么动态调用javabean的set方法

热度:63   发布时间:2016-04-22 00:34:04.0
如何动态调用javabean的set方法
现在有一个javabean,里面大概有70个字段如下temp1,temp2,temp3...接着就对应的70个get、set方法!
现在要往这个javabean存入数据,像这样javabean.setTemp1(i1)、javabean.setTemp2(i2)...
但是现在需要根据数据的多少,动态调用set方法存数据
例如:数据有5个,那么就调用javabean.setTemp1(i)、javabean.setTemp2(i)...到javabean.setTemp5(i);
数据有10个,那么就调用javabean.setTemp1(i)、javabean.setTemp2(i)...到javabean.setTemp10(i)这样

求高手提出自己的宝贵意见,小弟不胜感激!


------解决方案--------------------
通过自己拼凑方法名,然后用反射调用可以。。。

还可以通过内省方法操作。。。。

http://blog.csdn.net/helloapps/article/details/5724287
------解决方案--------------------
前些天刚好些了个类似于struts的填充form的东西,希望对你有帮助
Java code
public class Parameter2JavaBean {    /**     * 把req中的数据按照对象的属性取出来并set到对象当中并返回     * @param <E>     * @param req     * @param e     * @return <E>     */    public static <E>E setParameter2JavaBean(HttpServletRequest req, E e){        Class<?> clazz = e.getClass();        Field[] fields = clazz.getDeclaredFields();        for(Field field : fields){            Class<?> typeClass = field.getType();            String value = req.getParameter(field.getName());            if(value != null && !"".equals(value)){                setValue(e, clazz, field, typeClass, value);            }        }        return e;    }        /**     * 调用set方法把值set到对象当中     * @param obj 指定对象     * @param clazz 对象的class     * @param field 需要设置值的field对象     * @param typeClass field的类型的class     * @param value 对应的值     */    private static void setValue(Object obj, Class<?> clazz, Field field, Class<?> typeClass, String value){        String fieldName = field.getName();        String methodName = "set" + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1);        try {            Method method = clazz.getDeclaredMethod(methodName, new Class[]{typeClass});            method.invoke(obj, new Object[]{getClassTypeValue(typeClass, value)});        } catch (SecurityException e) {            e.printStackTrace();        } catch (IllegalArgumentException e) {            e.printStackTrace();        } catch (NoSuchMethodException e) {            e.printStackTrace();        } catch (IllegalAccessException e) {            e.printStackTrace();        } catch (InvocationTargetException e) {            e.printStackTrace();        }    }        /**     * 通过class类型获取获取对应类型的值     * @param typeClass class类型     * @param value 值     * @return Object     */    private static Object getClassTypeValue(Class<?> typeClass, String value){        if(typeClass == int.class){            if(value.equals("")){                return 0;            }            return Integer.parseInt(value);        }else if(typeClass == short.class){            if(value.equals("")){                return 0;            }            return Short.parseShort(value);        }else if(typeClass == byte.class){            if(value.equals("")){                return 0;            }            return Byte.parseByte(value);        }else if(typeClass == double.class){            if(value.equals("")){                return 0;            }            return Double.parseDouble(value);        }else if(typeClass == boolean.class){            if(value.equals("")){                return false;            }            return Boolean.parseBoolean(value);        }else if(typeClass == float.class){            if(value.equals("")){                return 0;            }            return Float.parseFloat(value);        }else if(typeClass == long.class){            if(value.equals("")){                return 0;            }            return Long.parseLong(value);        }else {            return typeClass.cast(value);        }    }}
  相关解决方案