平台采用jpa+hibernate访问数据库,返回是数据对象的列表,例如学生对象studentBO。访问属性使用.符号,例如studentA.getName()。如果想编一个通用的处理功能,就需要在不知道具体类的情况下,通过属性名字来访问。使用Object类可以承载一切类,例如可以代替studentBO、teacherBO。但是不能用o.getName来访问其姓名了,这个时候就要用到反射机制。
// 获取属性值
public static String getFieldValueByName(Object o,String fieldName) {
try {
String firstLetter = fieldName.substring(0, 1).toUpperCase();
String getter = "get" + firstLetter + fieldName.substring(1);
Method method = o.getClass().getMethod(getter, new Class[]{});
if (method==null){
CommonsUtil.debugLog("==getFieldValueByName no getter"+getter);
return "";
}
Object value = method.invoke(o, new Object[]{});
if (value==null){
CommonsUtil.debugLog("==getFieldValueByName fieldName="+fieldName);
return "";
}
return value.toString().replaceAll(" "," ").replaceAll("<br/>","\n").replaceAll("<br>","\n");
} catch (Exception e) {
CommonsUtil.recordLog(e);
}
return "";
}
取得任何对象的name属性调用如下:
getFieldValueByName(o,“name”)
采用类似机制可以按函数名字调用任何对象的函数,其实上述函数的核心就是调用的它的getName函数