我的任务是重写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;
}
发布于 2013-05-10 03:10:15
我要补充的一点是,每当您覆盖equals(...)
时,您也会希望覆盖hashCode()
。我同意,看到instanceof被过度使用会让我担心代码的味道,但我认为在这种情况下,你别无选择,只能使用instanceof。至于转换为泛型类型,我可能是错的,但在运行时,泛型确实不存在,所以它可能是没有意义的。
我看到的一个潜在的主要问题是,您在for循环中使用了==
。如果堆栈数组使用对象,则应在循环内使用equals(...)
。您的类是泛型的这一事实表明堆栈数组确实包含对象,但我不确定,因为我们看不到这一点。
https://stackoverflow.com/questions/16474530
复制