日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java getclass 相等_java使用反射比较两个bean对象属性值是否相等

發(fā)布時間:2024/7/23 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java getclass 相等_java使用反射比较两个bean对象属性值是否相等 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。