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

    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条件下出现了错误(针对类型Object的getVal()方法未定义)。您能否建议我一个解决方案,以便我可以一次性比较对象类型和值。
实际上,ParentClass是我的父母,我有几个派生类,并且我使用Object的equals方法比较基础对象和派生对象的类型。
另外,如何使用对象的hashCode验证我的等式?
请让我知道您的建议。
谢谢!

最佳答案

看一下您的比较:

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()))

10-08 13:04
查看更多