Guava-1.10类Equivalence

2019-05-31 10:23:58 浏览数 (1)

全路径名:

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在该相等关系下判断相等。

0 人点赞