001package com.google.common.base; 002 003import java.util.Arrays; 004import java.util.Objects; 005 006public class DeepEquivalence extends Equivalence<Object> { 007 public static final Equivalence<Object> DEEP_EQUIVALENCE = new DeepEquivalence(); 008 public DeepEquivalence() { 009 } 010 @Override 011 protected boolean doEquivalent(Object a, Object b) { 012 return Objects.deepEquals(a, b); 013 } 014 015 @Override 016 protected int doHash(Object object) { 017 return deepHashCode(object); 018 } 019 public static final int deepHashCode(Object a){ 020 if (a == null){ 021 return 0; 022 }else if (a instanceof Object[]) { 023 return Arrays.deepHashCode((Object[]) a); 024 } else if (a instanceof byte[]) { 025 return Arrays.hashCode((byte[]) a); 026 } else if (a instanceof short[]) { 027 return Arrays.hashCode((short[]) a); 028 } else if (a instanceof int[]) { 029 return Arrays.hashCode((int[]) a); 030 } else if (a instanceof long[]) { 031 return Arrays.hashCode((long[]) a); 032 } else if (a instanceof char[]) { 033 return Arrays.hashCode((char[]) a); 034 } else if (a instanceof float[]) { 035 return Arrays.hashCode((float[]) a); 036 } else if (a instanceof double[]) { 037 return Arrays.hashCode((double[]) a); 038 } else if (a instanceof boolean[]) { 039 return Arrays.hashCode((boolean[]) a); 040 } 041 return a.hashCode(); 042 } 043}