我在这里发布了一大堆有问题的代码。我试图同时比较两种对象类型及其值。
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()未定义类型Object)。能否请你给我一个解决方案,以便我可以一次比较对象类型和值。 实际上ParentClass是我的父,我有几个派生类,我使用Object的equals方法来比较基类和派生对象的类型。 另外我如何使用Object的hashCode验证我的等号? 请让我知道你的建议。 谢谢!
答案 0 :(得分:1)
看看你的比较:
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()))