我正在尝试使用我所覆盖的Object equals方法比较两个数组。我应该将对象参数转换为ListInterface,我似乎无法弄清楚发生了什么。任何帮助将不胜感激。
public class AList<T extends Comparable> implements ListInterface <T> {
private T[] list;
private int length;
private static final int MAX_SIZE = 50;
public AList()
{
this(MAX_SIZE);
}
public AList(int maxSize)
{
length = 0;
list = (T[]) new AList[maxSize];
}
public boolean equals(Object other)
{
boolean results = true;
if (list.length == ((ListInterface<T>) other).getLength())
{
for(int i = 0; i < list.length; i++)
{
if(list[i].equals((ListInterface<T>)other[i]))
results = true;
}
}
return results;
}
答案 0 :(得分:4)
看来你的equals方法试图检查对象封装的两个数组是否包含相同的对象。 Arrays.deepEquals(T [] t1,T [] t2)也许可以提供帮助。
public boolean equals(Object other)
{
if(other == null || ! (other instanceof AList<T>))
return false;
AList<T> a = (AList<T>)other;
return Arrays.deepEquals(list, a.list);
}
答案 1 :(得分:0)
如果other
不是ListInterface<T>
?
myListInterface.equals(new StringBuilder());
做什么? (答案是抛出InvalidCastException
或其他东西)。转换只能改变基元的类型,例如int
到boolean
不能够更改对象的类型。将数组转换为列表并不会使它成为一个列表,只是每当您尝试调用该对象没有的列表方法时,它就会产生错误。它通常表示您的多态设计很糟糕,但这种方法是个例外。这意味着您需要先使用instanceof
。
覆盖equals
很难。尝试从Eclipse或IntelliJ中自动生成一个以查看其中的工作,或者在线查找默认覆盖实现。