我正在为我的计算机科学课程分配作业,要求我实现Comparable接口。我们没有讨论过任何长度的接口,只是告诉它比较两个对象并返回小于,大于和等于,但是从字面意义上来说,这令人沮丧。我打算对此做更多的研究,但现在我发现我对为什么compareTo()方法的实现无法正常工作感到困惑。 Eclipse给了我一个错误,compareTo()必须返回一个int,但是如果您注意到,我将返回一个整数值。那么可能是什么问题呢?
public int compareTo(Task taskToCompare) {
if(this.complete && taskToCompare.isComplete()) {
if(this.priority == taskToCompare.getPriority()) {
return 0;
}
else if(this.priority < taskToCompare.getPriority()){
return -1;
}
else if(this.priority > taskToCompare.getPriority()) {
return 1;
}
} else if(this.complete == true && taskToCompare.isComplete() == false) {
return -1;
} else if(this.complete == false && taskToCompare.isComplete() == true) {
return 1;
}
}
如果返回类型为int
,则必须返回int
或throw
异常。仅退出不带return
的方法将导致编译器错误。
如果您具有if-else-if
条件,则可能会出现其中任何一个块都不被调用的情况。因此,您应该使用else
创建一个return
语句。
此外,如果多次调用该方法,则isComplete()
和taskToCompare.getPriority()
的结果可能会更改。编译器不知道您的逻辑是否可以阻止这种情况。
例如,如果complete
为false
,并且isComplete()
也返回false
,则为这种情况。和以前一样,编译器不知道您的逻辑是否可以阻止这种情况。
我认为您想要类似的东西:
public int compareTo(Task taskToCompare) {
if(this.complete && taskToCompare.isComplete()) {
if(this.priority == taskToCompare.getPriority()) {
return 0;
}
else if(this.priority < taskToCompare.getPriority()){
return -1;
}
else{
return 1;
}
} else if(this.complete == true && taskToCompare.isComplete() == false) {
return -1;
} else if(this.complete == false && taskToCompare.isComplete() == true) {
return 1;
}else{
return 0;
}}
如果this.complete == false
和taskToCompare.isComplete() == false
怎么办?
编译器在抱怨,因为您没有涵盖所有情况。