您的位置:首页 > 其它

判断两个对象相等的工具类

2014-10-21 14:30 330 查看
publicstatic boolean isObjectValueEqual(Object sourceObject,Object destObject) { try { return compare(sourceObject, destObject, true);}catch (IllegalArgumentException e) {e.printStackTrace();}catch (IllegalAccessException e) {e.printStackTrace();} return false;}

privatestatic boolean compare(Object sourceObject, Object destObject, boolean deepCom) throws IllegalArgumentException,IllegalAccessException { boolean isEquals = false; if (sourceObject == null && destObject == null) {isEquals =true;}else if ((sourceObject != null && destObject == null)|| (sourceObject ==null && destObject != null)) {isEquals = setIsEquals(false, sourceObject);}else if (sourceObject.getClass() != destObject.getClass()) {isEquals = setIsEquals(false, sourceObject);}else if (deepCom) { if (sourceObject.equals(destObject)) {isEquals =true;}else if (sourceObject instanceof Map) {Map<Object, Object> obj1 = (Map<Object, Object>) sourceObject;Map<Object, Object> obj2 = (Map<Object, Object>) destObject; if (obj1.size() != obj2.size()) {isEquals = setIsEquals(false, obj1);}else { for (Object key : obj1.keySet()) { if (!obj2.keySet().contains(key)) {isEquals =false; break;}isEquals = setIsEquals(compare(obj1.get(key), obj2.get(key),true),obj1.get(key)); if (!isEquals) break;}} }else if (sourceObject instanceof List) {List<Object> obj1 = (List<Object>) sourceObject;List<Object> obj2 = (List<Object>) destObject; if (obj1.size() != obj2.size()) {isEquals = setIsEquals(false, obj1);}else { for (int i = 0; i < obj1.size(); i++) {isEquals = setIsEquals(compare(obj1.get(i), obj2.get(i),true),obj1.get(i)); if (!isEquals) break;}}}else if (sourceObject instanceof Queue) { if (((Queue) sourceObject).isEmpty()&& ((Queue) destObject).isEmpty()) {isEquals =true;}else {Queue<Object> obj1 = (Queue<Object>) sourceObject;Queue<Object> obj2 = (Queue<Object>) destObject; if (obj1.size() != obj2.size()) {isEquals = setIsEquals(false, obj1);}else { int size = obj1.size(); for (int i = 0; i < size; i++) {isEquals = setIsEquals(compare(obj1.poll(), obj2.poll(),true),obj1); if (!isEquals) break;}}}}else if (sourceObject instanceof Object[]) {Object[] obj1 = (Object[]) sourceObject;Object[] obj2 = (Object[]) destObject; if (obj1.length != obj2.length) {isEquals = setIsEquals(false, obj1);}else { for (int i = 0; i < obj1.length; i++) {isEquals = setIsEquals(compare(obj1[i], obj2[i],true),obj1[i]); if (!isEquals) break;}}}else {Class<?extends Object> clazz = sourceObject.getClass();Field[] fields = clazz.getDeclaredFields(); for (Field field : fields) {field.setAccessible(true);Object obj1 = field.get(sourceObject);Object obj2 = field.get(destObject); if (obj1 != null && obj2 !=null && (obj1instanceof DataPaging || obj1 instanceof Government|| obj1instanceof AbstractGFSSummary|| obj1instanceof GFSReferencable|| obj1instanceof Map|| obj1instanceof List || obj1 instanceof Object[])) {isEquals = setIsEquals(compare(obj1, obj2,true), obj1);}else {isEquals = setIsEquals(compare(obj1, obj2,false), obj1);} if (!isEquals) break;}}}else {isEquals = setIsEquals(sourceObject.equals(destObject),sourceObject);} return isEquals;} private static boolean setIsEquals(boolean equals, Object object) { if (!equals) { try { throw new Exception("The objects are not equal: " + object);}catch (Exception e) {e.printStackTrace();}} return equals;}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  工具类