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}