重写Object等于方法

时间:2014-09-02 02:32:10

标签: java

我正在尝试使用我所覆盖的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;
    }

2 个答案:

答案 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或其他东西)。转换只能改变基元的类型,例如intboolean 能够更改对象的类型。将数组转换为列表并不会使它成为一个列表,只是每当您尝试调用该对象没有的列表方法时,它就会产生错误。它通常表示您的多态设计很糟糕,但这种方法是个例外。这意味着您需要先使用instanceof

覆盖equals很难。尝试从Eclipse或IntelliJ中自动生成一个以查看其中的工作,或者在线查找默认覆盖实现。