我对java中的compareTo方法有疑问。所以这个compareTo方法比较CarOwner对象,如果调用对象在时间顺序上比参数返回-1更早,如果调用对象后来按时间顺序与参数相比返回1,如果调用对象和参数是如果传入的参数不是CarOwner对象(使用instanceof或getClass来确定),或者为null,则返回-1。
按时间顺序返回0。我提出了这个代码,但它似乎没有工作,有人有任何建议吗?
public int compareTo(Object o)
{
if ((o != null ) && (o instanceof CarOwner))
{
CarOwner otherOwner = (CarOwner) o;
if (otherOwner.compareTo(getYear()) > 0)
return -1;
else if (otherOwner.compareTo(getYear()) < 0)
return 1;
else if (otherOwner.equals(getYear()))
if (otherOwner.compareTo(getMonth()) > 0)
return -1;
else if (otherOwner.compareTo(getMonth()) < 0)
return 1;
else if (otherOwner.equals(getMonth()))
return 0;
}
return -1;
}
答案 0 :(得分:1)
您正在将此实例的属性与整个otherOwner实例进行比较。你应该与otherOwner的特性进行比较。
例如
otherOwner.getYear().compareTo(getYear())
答案 1 :(得分:0)
如果getYear()和getMonth()返回可比较的对象
,则应该有效public int compareTo(Object o)
{
if ((o != null ) && (o instanceof CarOwner))
{
CarOwner otherOwner = (CarOwner) o;
int result = otherOwner.getYear().compareTo(getYear());
if (result != 0)
return result;
return otherOwner.getMonth().compareTo(getMonth());
}
return -1;
}
如果getYear()和getMonth()返回int,则:
public int compareTo(Object o)
{
if ((o != null ) && (o instanceof CarOwner))
{
CarOwner otherOwner = (CarOwner) o;
if (otherOwner.getYear() > getYear())
return -1
else if (otherOwner.getYear() < getYear())
return 1
else if (otherOwner.getMonth() > getMonth())
return -1
else if (otherOwner.getMonth() < getMonth())
return 1;
else
return 0;
}
return -1;
}
答案 2 :(得分:0)
如果将该方法应用于某些CarOwner,会发生什么:
所以你应该做的是将“Year”或“Month”与otherOwner的“Year”或“Month”进行比较并返回结果。
答案 3 :(得分:0)
当您比较不同的字段并深入挖掘年度字段是否相同时,我建议以下
int oy=otherOwner.getYear();
int ty=this.getYear();
int om=otherOwner.getMonth();
int tm=this.getMonth();
if(oy==ty){
return om-tm;
}else{
return oy-ty;
}
答案 4 :(得分:0)
在您的类(Comparable<CarOwner>
)上实现可比较界面之后,使用CarOwner作为compareTo方法而不是Object(int compareTo(CarOwner otherOwner)
)