全路径名:
com.google.common.base Class Equivalence<T>
简介
一种判定两个实例是否相等的策略。
方法
equivalent
代码语言:javascript复制public final boolean equivalent(@NullableDecl T a, @NullableDecl T b)
如果判断两个对象相等,返回true。 该方法判断相等有以下特点:
- 反身性(reflexive):对于任何参数x,包括null,equivalent(x, x) 为真。
- 对称性(symmetric):对于任何参数x,y,equivalent(x, y) == equivalent(y, x)。
- 传递性(transitive):对于任意参数x,y,z,如果equivalent(x, y)为真,equivalent(y, z),那么equivalent(x, z)应该返回真。
- 持续性(consistent):对于任意参数x,y,多次执行equivalent(x, y)应该始终返回true或false。
doEquivalent
代码语言:javascript复制@ForOverride
protected abstract boolean doEquivalent(T var1, T var2);
如果var1和var2判定为相等,返回true。 由equivalent调用,var1和var2不是同一个对象且非空。
hash
代码语言:javascript复制public final int hash(@NullableDecl T t) {
return t == null?0:this.doHash(t);
}
返回一个对象的hash值:
- 持续性(consistent):任意参数x,判定相等的定义没有变化的话,得到的hash值应该不变。相同应用的不同执行应该变化。
- distributable accross equivalence:对于任意参数x,y,如果equivalent(x, y)返回真,那么hash(x) == hash(y)。反之不需要,也就是说,如果equivalence(x, y) 为假,hash(x) == hash(y)可以为真。
- hash(null) == 0;
doHash
代码语言:javascript复制@ForOverride
protected abstract int doHash(T var1);
返回非空对象的hash值。
onResultOf
代码语言:javascript复制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)返回真。
wrap
代码语言:javascript复制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))为真.
pairwise
代码语言:javascript复制public final <S extends T> Equivalence<Iterable<S>> pairwise()
没看懂。。。。
equivalentTo
代码语言:javascript复制public final Predicate<T> equivalentTo(@NullableDecl T target)
返回一个断言,当且仅输入和target在该相等关系下判断相等。