现在有一个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)这样求高手提出自己的宝贵意见,小弟不胜感激!

解决方案 »

  1.   

    楼主 百度一下 java 反射
      

  2.   

    通过自己拼凑方法名,然后用反射调用可以还可以通过内省方法操作。http://blog.csdn.net/helloapps/article/details/5724287
      

  3.   

    前些天刚好些了个类似于struts的填充form的东西,希望对你有帮助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);
    }
    }
    }
      

  4.   

    如果一个业务Bean中字段很多是否可以考虑用“构造器模式”?
      

  5.   

    这个我也考虑过,但反射跟内省机制,是不是只能针对纯的javabean?因为我开发环境的实体类有点怪,只要把数据表拖入ide,就会自动生成两个java文件(如果名字为User),那就是User和UserImpl!第一个是接口,第二个是实现类(我水平不高,暂时还看不懂这样设计的意图)