作为用户要求,我必须从几个不同的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()方法。 这是正确的方法吗?单靠反射是否可行?
答案 0 :(得分:0)
看看Apache Commons BeanUtils,因为它似乎符合要求。具体来说,PropertyUtils.describe()为您提供给定POJO的完整getter列表,而PropertyUtils.getSimpleProperty(pojo, propName)
将为您提供指定属性的值(作为Object),在内部处理反射调用。当然,如果你需要,还有PropertyUtils.getPropertyType(pojo, propName)