compareTo()方法抛出“此方法必须返回int”错误,尽管在方法中返回int

问题描述 投票:1回答:1

我正在为我的计算机科学课程分配作业,要求我实现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;
    }
}
java
1个回答
4
投票

如果返回类型为int,则必须返回intthrow异常。仅退出不带return的方法将导致编译器错误。

如果您具有if-else-if条件,则可能会出现其中任何一个块都不被调用的情况。因此,您应该使用else创建一个return语句。

此外,如果多次调用该方法,则isComplete()taskToCompare.getPriority()的结果可能会更改。编译器不知道您的逻辑是否可以阻止这种情况。

例如,如果completefalse,并且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;

}}


1
投票

如果this.complete == falsetaskToCompare.isComplete() == false怎么办?

编译器在抱怨,因为您没有涵盖所有情况。

© www.soinside.com 2019 - 2024. All rights reserved.