崔大胖子

Equivalence#Wrapper<T>

public static final class Wrapper<T> implements Serializable {  省去了部分不重要函数
  private final Equivalence<? super T> equivalence;  包装的equivalence实例,用于判别两个对象是否相等
@Nullable private final T reference; 具体类型,注意加了final关键字
private Wrapper(Equivalence<? super T> equivalence, @Nullable T reference) { //构造函数,为private,这样你就只能通过equivalence中的函数构造Wrapper
this.equivalence = checkNotNull(equivalence);
this.reference = reference;

public boolean equals(@Nullable Object obj) {
if (obj == this) {
return true;
}
if (obj instanceof Wrapper) { 这就是我为什么说只有俩个Wapper比较才有意义
Wrapper<?> that = (Wrapper<?>) obj; // note: not necessarily a Wrapper<T>

if (this.equivalence.equals(that.equivalence)) { 主要是考虑如果a==b,那么反之也应该b==a;如果b!=a.这种情况返回false;
@SuppressWarnings("unchecked")
Equivalence<Object> equivalence = (Equivalence<Object>) this.equivalence;
return equivalence.equivalent(this.reference, that.reference);
}
}
return false;
}
private static final long serialVersionUID = 0;
}

posted on 2017-08-20 01:23  崔大胖子  阅读(698)  评论(0)    收藏  举报

导航