Created
September 23, 2013 05:53
-
-
Save chris-martin/6666874 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
final class EqualsEquivalence<A> | |
implements Equivalence<A> | |
{ | |
@Override | |
public boolean equals(A a, A b) | |
{ | |
return a.equals(b); | |
} | |
@Override | |
public int hashCode(A obj) | |
{ | |
return obj.hashCode(); | |
} | |
<B> Equivalence<B> map(final Function<? super B, ? extends A> f) | |
{ | |
return new Equivalence<B>() | |
{ | |
@Override | |
public boolean equals(B a, B b) | |
{ | |
return EqualsEquivalence.this.equals(f.apply(a), f.apply(b)); | |
} | |
@Override | |
public int hashCode(B obj) | |
{ | |
return EqualsEquivalence.this.hashCode(f.apply(obj)); | |
} | |
}; | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
interface Equivalence<T> | |
{ | |
boolean equals(T a, T b); | |
int hashCode(T obj); | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
final class EquivalenceWrapper<T> | |
{ | |
final T value; | |
final Equivalence<T> equivalence; | |
EquivalenceWrapper( | |
T value, | |
Equivalence<T> equivalence | |
) | |
{ | |
this.value = value; | |
this.equivalence = equivalence; | |
} | |
@Override | |
@SuppressWarnings("unchecked") | |
public boolean equals(Object obj) | |
{ | |
try | |
{ | |
return equivalence.equals( | |
value, | |
((EquivalenceWrapper<T>) obj).value | |
); | |
} | |
catch (ClassCastException e) | |
{ | |
return false; | |
} | |
} | |
@Override | |
public int hashCode() | |
{ | |
return equivalence.hashCode(value); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment