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
<String, String
> map
= new HashMap
<String, String
>();
for (String key
: map.
keySet()) {
if (target
instanceof Map) {
HashMap
<String, String
> tarMap
= new HashMap
<String, String
>();
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
<String, String
> tarMap
= new HashMap
<String, String
>();
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
*/
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;
}
try {
objValue
= ms
[i
].
invoke(obj,
new Object[] {});
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;
}
}
// logger.info("取方法出错!" + e.toString());
}
return null;
}
public static void main
(String args
[]) {
}
}
//源代码片段来自云代码http://yuncode.net