判断两个对象相等的工具类
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;}
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;}
相关文章推荐
- 利用XmlSerializer在测试环境判断两个对象值相等
- Collection判断两个对象是否相等
- 判断两个对象内容相等
- List、Set、Map判断两个对象相等的标准
- java中判断两个对象是否相等
- Java 对象之间的比较,判断两个对象的某一个属性相等,则对象相等
- 直接比较两个对象是否相等返回false和List中判断是否包含某个对象的问题
- C#判断两个对象是否相等
- java怎么判断两个Set 里的对象的值是否相同【两个set中的值是否相等】、java treeset和hashset如何判断元素是否相同【即对象是否完全相同;利用一个set去除重复元素】
- java中判断两个对象是否相等的方法和代码
- 默认的Equals并非是判断两个对象相等,而是判断是否是同一引用
- 判断两个对象是否相等的js函数
- c#如何判断两个对象是否相等
- java integer对象判断两个数字是否相等
- 判断两个对象是否相等的js函数
- java 对象比较 判断两个对象的某些或某个属性相同 这对象相等。
- List集合判断两个对象相等的标准
- 学习体会:在JAVA中如何判断两个对象是否相等
- 判断两个对象是否相等,为什么必须同时重写equals()和hashcode()方法
- 判断两个对象是否相等,为什么必须同时重写equals()和hashcode()方法