0

我在这里发布了大量有问题的代码。我正在尝试同时比较两种对象类型及其值。

    public boolean equals(Object val1)
{

    if (!(val1 instanceof ParentClass))

    return false;

    ParentClass val2 = (ParentClass) val1;

    if ((val1.getClass().equals(val2.getClass())) && val1.getVal().equals(val2.getVal()));
    System.out.println("Both objects belong to same class  and the values are equal too!!");

    return true;

}

我的父类中有这个块,并且在上述 IF 条件下出现错误(方法 getVal() 未定义对象类型)。您能否建议我一个解决方案,以便我可以一次性比较对象类型和值。实际上 ParentClass 是我的父类,我有几个派生类,我正在使用 Object 的 equals 方法来比较基类和派生对象的类型。另外,如何使用 Object 的 hashCode 验证我的 equals?请让我知道你的建议。谢谢!

4

1 回答 1

1

看看你的比较:

if ((val1.getClass().equals(val2.getClass())) && val1.getVal().equals(val2.getVal()));

那是比较val1val2- 但考虑到前一行,这些是相同的参考!您想thisval2. 例如:

if (this.getClass().equals(val2.getClass()) && this.getVal().equals(val2.getVal()))

this.此处不需要显式部分,但为了清楚起见,我将其包括在内。)

另请注意,由于Class<>对象的构造/缓存方式,您只需检查引用相等性:

if (this.getClass() == val2.getClass() && this.getVal().equals(val2.getVal()))
于 2013-09-08T19:57:11.787 回答