Java将此类与该类进行比较以获得相等性

Sug*_*ara 2 java compare equality

我的任务是覆盖方法equals().我有一些关注使用Stack12<E> that = (Stack12<E>)o;o instanceof Stack12.我很奇怪他们是不好的练习,特别是我that在for-loop中的使用感觉有点不对我.

有没有其他方法可以将此类与其他对象进行比较?或者我的比较方法足够强大?

  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;
 }
Run Code Online (Sandbox Code Playgroud)

Hov*_*els 5

我要添加的一个警告是,无论何时覆盖equals(...),您都需要覆盖hashCode().我同意看到过度使用的例子让我担心代码味道,但我认为你别无选择,只能在这种情况下使用instanceof.至于转换为泛型类型,我可能是错的,但在运行时,泛型确实不存在,所以它可能没有实际意义.

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