Java 创建equals方法
根据作业,我必须创建一个名为“equals”的方法来执行以下操作:Java 创建equals方法,java,equals,Java,Equals,根据作业,我必须创建一个名为“equals”的方法来执行以下操作: @Override public boolean equals(Object object) { if (object == null || !(object instanceof Money)) { return false; } Money other = (Money) object; return this.value.equals(other.value)
@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;
}
该方法将调用对象的实例变量与实例变量进行比较
如果参数对象的美元和美分相等,则返回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;
}
因此,您的两个错误都试图告诉您,无论出于何种原因,
Money
类没有名为symbol
的字段。因此,我会先确认该字段的名称,然后再更正它
您还需要一个返回状态代码>行,如问题下方的注释所述
最后,可能需要最大的更改,您没有正确的方法签名。从JavaDoc中可以看到,该方法旨在将对象
作为参数,而不是货币
的另一个实例。通常,您会执行以下操作:
@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
s等)没有任何方法(包括.equals()
),因此必须使用=
而不是.equals()
来比较这些字段,如上面的示例所示
这并不是最完整的解决方案(有很多很好的信息可以回答),如果要修改equals()
,也应该重写,以保持它们的一致性。是美元
和美分
基本长
类型吗
如果是,您可能希望使用(美元==其他对象.美元)&&&(美分==其他对象.美分)。您不能调用方法(例如equals()
)在原语上。你的Money
类是否定义了symbol
实例变量?你能发布Money类/接口吗?找不到symbolsymbol
你需要在equals
的末尾返回status
。顺便说一句,这不是一个有效的equals
覆盖。我检查过了,我不知道为什么要放置符号。我的两个实例字段的长度分别为“美元”和“美分”。这导致了一个新的错误,因此我必须进行编辑。必须是心不在焉地放置符号。@WillBro更新为包含原语的比较(例如,long
)字段,这就是导致新错误的原因。需要首先检查对象是否为null,以及它是否返回false。还需要检查this.getClass()!=other.getClass()
。instanceOf也做同样的事情,tooThanks@GIJoe-键入有点匆忙,我必须承认通常使用IDE生成的equals()
和hashCode()
方法在大多数情况下都是起点!