HeavenTang

导航

java 反射获取某个类的属性名和属性的值

/**
* 根据字段饰扣可以为空获取每个属性的变更内容 如 课程名称:英语-->数学;
* @param vo
* @param fieldName 字段名:传值类型为CourseName 周首字母大写
* @param describe 字段的描述:可以理解为就是字段的名称 如 课程名称
* @param sb StringBuffer对象
* @return
* @throws Exception
*/
private StringBuffer getEditContentWhetherNull(CourseDtFieldsDto vo,String fieldName,String describe,StringBuffer sb) throws Exception {
Class aClass = vo.getClass();
String getFieldNameBefore = "get"+fieldName+"Before"; //获取修改前的值的get方法名
String getFieldNameAfter = "get"+fieldName+"After"; //获取修改后的值的get方法名
Method getBefore = aClass.getDeclaredMethod(getFieldNameBefore); //获取修改前的值的get方法
Method getAfter = aClass.getDeclaredMethod(getFieldNameAfter); //获取修改后的值的get方法
String type= getBefore.getGenericReturnType().toString();
type = type.substring(type.lastIndexOf(".")+1); //获取属性的类型
if("String".equals(type)){
String before = (String) getBefore.invoke(vo); //获取修改前的值
String after = (String) getAfter.invoke(vo); //获取修改后的值
if((before != null && !"".equals(before)) && (after == null || "".equals(after))){ //修改前的值不为空 修改后的值为空
sb.append(describe+":"+before+" --> "+"空; ");
}
if((before != null && !"".equals(before)) && (after != null && !"".equals(after)) && (!before.equals(after))){ //修改前的值不为空 修改后的值不为空 且修改前和修改后不相等
sb.append(describe+":"+before+" --> "+after+"; ");
}
if((before == null || "".equals(before)) && (after != null && !"".equals(after))){ //修改前的值为空 修改后的值不为空
sb.append(describe+":空"+" --> "+after+"; ");
}
}else{
Object before = getBefore.invoke(vo); //获取修改前的值
Object after = getAfter.invoke(vo); //获取修改后的值
if((before != null) && (after == null)){ //修改前的值不为空 修改后的值为空
sb.append(describe+":"+before+" --> "+"空; ");
}
if((before != null) && (after != null) && (!before.equals(after))){ //修改前的值不为空 修改后的值不为空 且修改前和修改后不相等
sb.append(describe+":"+before+" --> "+after+"; ");
}
if((before == null) && (after != null)){ //修改前的值为空 修改后的值不为空
sb.append(describe+":空"+" --> "+after+"; ");
}
}
return sb;
}

posted on 2024-01-23 18:02  HeavenTang  阅读(109)  评论(0编辑  收藏  举报