用反射连接getter结果

时间:2015-06-15 07:58:59

标签: java reflection

作为用户要求,我必须从几个不同的Excel文件中提取数据,并且每个文件都连接它们的值(对于每一行,在需要时转换为字符串)以将结果保存到DB。 我已经将这些excel文件映射到每个文件的不同bean(POJO)。 我想做的是通过反射调用每个getter,并使用单个方法处理所有这些(及其未来的修改!),而无需手动调用每个getter(简单,但容易出错并请求代码更改)对于每个excel文件修改)。 这是我到目前为止所得到的:

public String getConcatenatedValues(Class beanClass, Object myBean) throws IntrospectionException, IllegalArgumentException, IllegalAccessException, InvocationTargetException{

    String output = "";

    for(PropertyDescriptor propertyDescriptor : Introspector.getBeanInfo(beanClass, BeanBase.class).getPropertyDescriptors()){

        Method myMethod = propertyDescriptor.getReadMethod();
        Object resultFromGetter = myMethod.invoke(myBean);
//missing logic here

        output += resultFromGetter.toString();
    }


    return output;
}

BaseBean这里是每个bean扩展的类,我不想调用getter。我只对beanClass getters感兴趣。 我需要的是对myMethod.getReturnType()返回的类的动态强制转换 能够调用正确类的toString()方法。 这是正确的方法吗?单靠反射是否可行?

1 个答案:

答案 0 :(得分:0)

看看Apache Commons BeanUtils,因为它似乎符合要求。具体来说,PropertyUtils.describe()为您提供给定POJO的完整getter列表,而PropertyUtils.getSimpleProperty(pojo, propName)将为您提供指定属性的值(作为Object),在内部处理反射调用。当然,如果你需要,还有PropertyUtils.getPropertyType(pojo, propName)