获取Java对象中所有的属性名称和属性值

获取Java对象中所有的属性名称和属性值

大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说获取Java对象中所有的属性名称和属性值,希望能够帮助大家进步!!!

private static Logger logger= LoggerFactory.getLogger(ObjectFieldUtil.class);	/** * 将旧对象的属性值与新对象的属性值做比较 记录修改的属性值名称 * @param oldObject 旧对象 * @param newObject 新对象 * @return 修改的对象属性值名称集合 */	public static List<String> getChangeList(Object oldObject, Object newObject) {	//修改的对象属性值名称集合	List<String> changeList=new ArrayList<>();	//根据对象获取属性值名称	String[] filedNameArray=getFieldName(oldObject);	//对比两个对象属性值是否相等	for(int j=0 ; j<filedNameArray.length ; j++){ //遍历所有属性	String fieldName = filedNameArray[j]; //获取属性的名字	//忽略版本对比	if("serialVersionUID".equals(fieldName)){	continue;	}	Object valueOld = getFieldValueByName(fieldName,oldObject);//旧对象的值	Object valueNew = getFieldValueByName(fieldName,newObject);//新对象的值	if(valueOld == valueNew || valueOld.equals(valueNew)){	//属性值相同	}else{	//属性值不同 ,记录属性名称	changeList.add(fieldName);	}	}	return changeList;	}	/** * 获取属性名数组 * */	private static String[] getFieldName(Object o){	Field[] fields=o.getClass().getDeclaredFields();	String[] fieldNames=new String[fields.length];	for(int i=0;i<fields.length;i++){	fieldNames[i]=fields[i].getName();	}	return fieldNames;	}	/** * 根据属性名获取属性值 * @param fieldName 属性名称 * @param o 对象 * @return */	private static Object getFieldValueByName(String fieldName, Object o) {	try {	String firstLetter = fieldName.substring(0, 1).toUpperCase();	String getter = "get" + firstLetter + fieldName.substring(1);	Method method = o.getClass().getMethod(getter, new Class[] {});	Object value = method.invoke(o, new Object[] {});	return value;	} catch (Exception e) {	logger.error("根据属性名获取属性值异常:"+e.getMessage(),e);	return null;	}	}

 

本文来源huayang183,由架构君转载发布,观点不代表Java架构师必看的立场,转载请标明来源出处:https://javajgs.com/archives/18266

发表评论