java两个对象字段值比较_使用反射比较两个bean对象属性值是否相等

该博文介绍了如何使用反射来比较两个Java Bean或Map对象的属性值是否相等。通过`DomainEquals`类的静态方法`domainEquals`,可以实现非Map类型和Map类型的对象字段值的比较。如果对象为空或者字段值不匹配,方法将返回false。
摘要由CSDN通过智能技术生成

[java]代码库import java.lang.reflect.Field;

import java.lang.reflect.Method;

import java.util.HashMap;

import java.util.Map;

import org.apache.log4j.Logger;

public class DomainEquals {

/**

* 日志操作类

*/

private static Logger logger = Logger.getLogger(DomainEquals.class);

public DomainEquals() {

}

/**

* 比较两个BEAN或MAP对象的值是否相等

* 如果是BEAN与MAP对象比较时MAP中的key值应与BEAN的属性值名称相同且字段数目要一致

* @param source

* @param target

* @return

*/

public static boolean domainEquals(Object source, Object target) {

if (source == null || target == null) {

return false;

}

boolean rv = true;

if (source instanceof Map) {

rv = mapOfSrc(source, target, rv);

} else {

rv = classOfSrc(source, target, rv);

}

logger.info("THE EQUALS RESULT IS " + rv);

return rv;

}

/**

* 源目标为MAP类型时

* @param source

* @param target

* @param rv

* @return

*/

private static boolean mapOfSrc(Object source, Object target, boolean rv) {

HashMap map = new HashMap();

map = (HashMap) source;

for (String key : map.keySet()) {

if (target instanceof Map) {

HashMap tarMap = new HashMap();

tarMap = (HashMap) target;

if(tarMap.get(key)==null){

rv = false;

break;

}

if (!map.get(key).equals(tarMap.get(key))) {

rv = false;

break;

}

} else {

String tarValue = getClassValue(target, key) == null ? "" : getClassValue(target, key).toString();

if (!tarValue.equals(map.get(key))) {

rv = false;

break;

}

}

}

return rv;

}

/**

* 源目标为非MAP类型时

* @param source

* @param target

* @param rv

* @return

*/

private static boolean classOfSrc(Object source, Object target, boolean rv) {

Class> srcClass = source.getClass();

Field[] fields = srcClass.getDeclaredFields();

for (Field field : fields) {

String nameKey = field.getName();

if (target instanceof Map) {

HashMap tarMap = new HashMap();

tarMap = (HashMap) target;

String srcValue = getClassValue(source, nameKey) == null ? "" : getClassValue(source, nameKey)

.toString();

if(tarMap.get(nameKey)==null){

rv = false;

break;

}

if (!tarMap.get(nameKey).equals(srcValue)) {

rv = false;

break;

}

} else {

String srcValue = getClassValue(source, nameKey) == null ? "" : getClassValue(source, nameKey)

.toString();

String tarValue = getClassValue(target, nameKey) == null ? "" : getClassValue(target, nameKey)

.toString();

if (!srcValue.equals(tarValue)) {

rv = false;

break;

}

}

}

return rv;

}

/**

* 根据字段名称取值

* @param obj

* @param fieldName

* @return

*/

public static Object getClassValue(Object obj, String fieldName) {

if (obj == null) {

return null;

}

try {

Class beanClass = obj.getClass();

Method[] ms = beanClass.getMethods();

for (int i = 0; i < ms.length; i++) {

// 非get方法不取

if (!ms[i].getName().startsWith("get")) {

continue;

}

Object objValue = null;

try {

objValue = ms[i].invoke(obj, new Object[] {});

} catch (Exception e) {

logger.info("反射取值出错:" + e.toString());

continue;

}

if (objValue == null) {

continue;

}

if (ms[i].getName().toUpperCase().equals(fieldName.toUpperCase())

|| ms[i].getName().substring(3).toUpperCase().equals(fieldName.toUpperCase())) {

return objValue;

} else if (fieldName.toUpperCase().equals("SID")

&& (ms[i].getName().toUpperCase().equals("ID") || ms[i].getName().substring(3).toUpperCase()

.equals("ID"))) {

return objValue;

}

}

} catch (Exception e) {

// logger.info("取方法出错!" + e.toString());

}

return null;

}

public static void main(String args[]) {

}

}

//源代码片段来自云代码http://yuncode.net

694748ed64b9390909c0d88230893790.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值