我正在写一个类似的课程。我已经重写了compareTo方法,以降序为基础按日期对对象进行排序。
public class Employee实现Comparable {
private Timestamp joinDate;
public Timestamp getJoinDate()
{
return joinDate;
}
public void setJoinDate(Timestamp joinDate)
{
this.joinDate = joinDate;
}
@Override
public int compareTo(Employee a)
{
//sort employess based on join date desc
return a.getJoinDate().compareTo(this.getJoinDate());
}
}
我的声纳正在抱怨重写equals方法。
如何在此处覆盖equals方法。
答案 0 :(得分:2)
如果要覆盖方法compareTo
,则必须使用相同的签名。实际签名使用Object
参数:
@Override
public int compareTo(Object o)
{
return ((Employee) o).getJoinDate().compareTo(joinDate);
}
请注意,您必须明确将<{1}}投射到obj
,否则您将无法调用其方法Employee
。
修改:如果您要覆盖getJoinDate()
方法,可以返回比较属性equals()
的结果:
joinDate
注意:没有必要在@Override
public boolean equals(Object obj)
{
return joinDate.equals(((Employee) obj).getJoinDate());
}
课程内拨打getJoinDate()
,所以你可以这样做:
Employee
或
return ((Employee) o).joinDate.compareTo(joinDate);
答案 1 :(得分:2)
在你的类中包含它(当你重写equals时,你还必须覆盖hashCode):
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((joinDate == null) ? 0 : joinDate.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Snippet other = (Snippet) obj;
if (joinDate == null) {
if (other.joinDate != null)
return false;
} else if (!joinDate.equals(other.joinDate))
return false;
return true;
}
答案 2 :(得分:0)
.equals() == true
和.compareTo(...) == 0
表示的内容之间存在差异。 equals()
方法用于检查两个对象是否相等,而compareTo
用于设置元素之间的关系顺序,一个是否大于另一个,另一个更大然后是第一个,或者这一个都不适用,这通常意味着对象是相等的。
除非您有非常好的理由,否则您应该覆盖equals
和compareTo
。一个很好的理由是BigDecimal
类,其中equals
比较对象的值及其比例,而compareTo
只比较值。
对于您的情况,我会覆盖equals()
,如下所示:
@Override
public int hashCode() {
return this.getJoinDate().hashCode();
}
@Override
public boolean equals(Object obj) {
//correct argument check
if (!(obj instanceof Employee)) {
return false;
}
//check nulls
if (obj == null) {
return false;
}
Employee other = (Employee) obj;
if (this.getJoinDate() == null) {
return other.getJoinDate() == null;
}
return this.getJoinDate().equals(other.getJoinDate());
}