java getclass 相等_java使用反射比较两个bean对象属性值是否相等
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的屬性值名稱相同且字段數(shù)目要一致
*?@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;
}
/**
*?根據(jù)字段名稱取值
*?@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?
//?非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[])?{
}}
總結
以上是生活随笔為你收集整理的java getclass 相等_java使用反射比较两个bean对象属性值是否相等的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ajax将响应结果显示到iframe,J
- 下一篇: diy直立双足机器人_Aelos Pro