com.google.common.base Class Equivalence<T>
一种判定两个实例是否相等的策略。
public final boolean equivalent(@NullableDecl T a, @NullableDecl T b)
如果判断两个对象相等,返回true。 该方法判断相等有以下特点:
@ForOverride
protected abstract boolean doEquivalent(T var1, T var2);
如果var1和var2判定为相等,返回true。 由equivalent调用,var1和var2不是同一个对象且非空。
public final int hash(@NullableDecl T t) {
return t == null?0:this.doHash(t);
}
返回一个对象的hash值:
@ForOverride
protected abstract int doHash(T var1);
返回非空对象的hash值。
public final <F> Equivalence<F> onResultOf(Function<F, ? extends T> function)
为F返回一个相等关系,先对参数执行function,再判断。 也就是说,对于任意非空对象x、y,当equivalence.equivalent(function.apply(a), function.apply(b))结果为真,equivalence.onResultOf(function).equivalent(a, b)返回真。
public final <S extends T> Equivalence.Wrapper<S> wrap(@NullableDecl S reference)
返回reference的包装,实现了Object.equals()。这样当且仅当this.equivalent(a, b)返回真时,wrap(this, a).equals(wrap(this, b))为真.
public final <S extends T> Equivalence<Iterable<S>> pairwise()
没看懂。。。。
public final Predicate<T> equivalentTo(@NullableDecl T target)
返回一个断言,当且仅输入和target在该相等关系下判断相等。