根据作业,我必须创建一个名为" equals"的方法。做以下事情:
该方法将调用对象的实例变量与实例变量进行比较 参数对象的相等性,如果美元和美分,则返回
true
调用对象与参数对象的美元和美分相同。 否则,它返回false
。
更新:我犯了一个错误并把错误的东西更新了。出现了新的错误:
Money.java:115: error: long cannot be dereferenced
if (dollars.equals(otherObject.dollars) &&
^
Money.java:116: error: long cannot be dereferenced
cents.equals(otherObject.cents))
^
2 errors
使用方法:
public boolean equals(Money otherObject)
{
boolean status;
if (dollars.equals(otherObject.dollars) &&
cents.equals(otherObject.cents))
return status = true;
else
return status = false;
}
答案 0 :(得分:1)
因此,您的两个错误都试图告诉您,无论出于何种原因,您的Money
类都没有名为symbol
的字段。所以我先确认该字段的名称是什么,然后更正。
您还需要return status;
行,如您问题下方的评论中所述。
最后,也许要求所有内容的最大变化,你没有equals()
的方法签名正确。正如您在JavaDoc中看到的那样,该方法旨在将Object
作为参数,而不是Money
的另一个实例。通常,您会执行以下操作:
@Override
public boolean equals(Object object) {
if (object == null || !(object instanceof Money)) {
return false;
}
Money other = (Money) object;
return this.value.equals(other.value)
&& this.secondField.equals(other.secondField)
&& this.primitiveField == other.primitiveField;
}
由于原始类型(int
s,long
等)没有任何方法(包括.equals()
),您必须使用{{1}来比较这些字段而不是==
,如上例所示。
这不是最完整的解决方案(有很多好的信息可以回答this question),如果您要修改.equals()
,还应该覆盖Object.hashCode()
,以保留它们< EM>一致的
答案 1 :(得分:1)
是dollars
和cents
原始long
类型吗?
你想使用(dollar == otherObject.dollars)&amp;&amp; (美分== otherObject.cents)如果是的话。您无法在基元上调用方法(例如equals()
)。