0

假设一个class Memberwhere 成员有一个Idtype StringString equals()我想知道在另一个实现中使用一个实现是否有任何问题。如果field Id是 type会不会更好Long

@Override public boolean equals(Object object){
  if(object == null) return false;
    if(! (object instanceof Member)) return false;
    Member member= (Member) object;
    if(this.Id.equals(member.Id))  //<==My concern is here
        return true; 
    else 
        return false;
}
4

3 回答 3

1

我看到的唯一问题是您可能还有更多的类成员id,即使两个实例差异很大但具有相同的. 考虑到这一点,请确保同时进行一致的实施以避免不一致。equalstrueidhashCode

另一个想法是定义自定义比较器,例如

static Comparator<Member> MEMBER_ID_COMPARATOR = new Comparator<Member>() {
    @Override
    public int compare(Member first, Member second) {
       assert(first.getId() != null);
       assert(second.getId() != null);
       return first.getId().compareTo(second.getId());
    }   
}
于 2013-08-30T20:21:58.843 回答
0

完全没有问题。从这个角度来看,Id作为一个离开String。如果它只包含数字,是的,您可以使用LongBigInteger(我的偏好)。但无论如何,这是一种不同的动物。

于 2013-08-30T20:13:39.370 回答
0

试试这个

@Override public boolean equals(Object object){
  if(object == null) return false;
  if(! (object instanceof Member)) return false;
  Member member= (Member) object;
  if (this.Id == null && member.Id == null)
      return true;
  else if (this.Id != null && member.Id != null)
      return this.Id.equals(member.Id);
  else
      return false;
}
于 2013-08-30T20:22:25.760 回答