2

我的任务是重写方法equals()。Stack12<E> that = (Stack12<E>)o;我对使用and有一些顾虑o instanceof Stack12。我想知道他们是不是不好的做法,尤其是我that在 for 循环中使用的方式对我来说有点不合适。

还有其他方法可以将此类与其他对象进行比较吗?还是我的比较方法足够稳健?

  public boolean equals(java.lang.Object o){
  if(o == this) return true;
  if(o == null || !(o instanceof Stack12)){
     return false;
  }

  Stack12<E> that = (Stack12<E>)o;
  if(this.size != that.size || this.capacity != that.capacity ){
     return false;
  }
  for(int i = 0; i < this.size; i++){
     if( that.stack[i] != this.stack[i] ){
        return false;
     }
  }
  return true;
 }
4

1 回答 1

5

我要补充的一个警告是,每当您覆盖时equals(...),您也会想要覆盖hashCode()。我同意看到 instanceof 被过度使用会让我担心代码异味,但我认为你别无选择,只能在这种情况下使用 instanceof。至于转换为泛型类型,我可能是错的,但是在运行时,泛型确实不存在,所以它可能没有实际意义。

我看到的一个潜在的主要问题是您==在 for 循环中使用。如果您的堆栈数组使用对象,则应equals(...)在循环内使用。您的类是通用的这一事实表明堆栈数组确实包含对象,但我不确定,因为我们没有看到这一点。

于 2013-05-10T03:10:15.150 回答