2

私の課題は、メソッド equals() をオーバーライドすることです。と を使用する際にいくつか懸念事項がStack12<E> that = (Stack12<E>)o;ありo instanceof Stack12ます。特にforループでの使用方法は、私にthatは少し正しくないと感じています。

このクラスを他のオブジェクトと比較する別の方法はありますか? または、私の比較方法は十分に堅牢ですか?

  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

追加する 1 つの注意点は、オーバーライドするたびに、オーバーライドequals(...)することもあるということですhashCode()。instanceof の使いすぎを見るとコードの匂いが気になるのは同意ですが、このような状況では instanceof を使用するしかないと思います。ジェネリック型へのキャストに関しては、私が間違っているかもしれませんが、実行時にはジェネリックは実際には存在しないため、意味がないかもしれません。

ただし、潜在的に大きな問題の 1 つは==、for ループで使用していることです。スタック配列がオブジェクトを使用する場合はequals(...)、ループ内で使用する必要があります。クラスがジェネリックであるという事実は、スタック配列がオブジェクトを保持していることを示唆していますが、これが表示されないため、わかりません。

于 2013-05-10T03:10:15.150 に答える