001package com.google.common.cache; 002 003import java.util.Arrays; 004import java.util.Objects; 005 006import com.google.common.base.Equivalence; 007 008public class DeepCacheBuilder { 009 public static final Equivalence<Object> DEEP_EQUIVALENCE = new Equivalence<Object>(){ 010 011 @Override 012 protected boolean doEquivalent(Object a, Object b) { 013 return Objects.deepEquals(a, b); 014 } 015 016 @Override 017 protected int doHash(Object object) { 018 return deepHashCode(object); 019 }}; 020 021 public static final int deepHashCode(Object a){ 022 if (a == null){ 023 return 0; 024 }else if (a instanceof Object[]) { 025 return Arrays.deepHashCode((Object[]) a); 026 } else if (a instanceof byte[]) { 027 return Arrays.hashCode((byte[]) a); 028 } else if (a instanceof short[]) { 029 return Arrays.hashCode((short[]) a); 030 } else if (a instanceof int[]) { 031 return Arrays.hashCode((int[]) a); 032 } else if (a instanceof long[]) { 033 return Arrays.hashCode((long[]) a); 034 } else if (a instanceof char[]) { 035 return Arrays.hashCode((char[]) a); 036 } else if (a instanceof float[]) { 037 return Arrays.hashCode((float[]) a); 038 } else if (a instanceof double[]) { 039 return Arrays.hashCode((double[]) a); 040 } else if (a instanceof boolean[]) { 041 return Arrays.hashCode((boolean[]) a); 042 } 043 return a.hashCode(); 044 } 045 public static final CacheBuilder<Object, Object> newBuilder(){ 046 return newBuilder(DEEP_EQUIVALENCE,DEEP_EQUIVALENCE); 047 } 048 public static final CacheBuilder<Object, Object> newBuilder( 049 Equivalence<Object> keyEquivalence, 050 Equivalence<Object> valueEquivalence){ 051 CacheBuilder<Object, Object> builder = CacheBuilder.newBuilder(); 052 if(keyEquivalence != null){ 053 builder.keyEquivalence(keyEquivalence); 054 } 055 if(valueEquivalence != null){ 056 builder.valueEquivalence(valueEquivalence); 057 } 058 return builder; 059 } 060}