我在这里发布了一大堆有问题的代码。我正在尝试同时比较两种对象类型及其值。
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()));
就是比较
val1
和val2
-但鉴于前一行,它们是相同的参考!您要比较this
和val2
。例如:if (this.getClass().equals(val2.getClass()) && this.getVal().equals(val2.getVal()))
(在这里不需要显式的
this.
部分,但是为了清楚起见,我将其包括在内。)另请注意,由于
Class<>
对象的构造/缓存方式,您可以仅检查引用是否相等:if (this.getClass() == val2.getClass() && this.getVal().equals(val2.getVal()))