首页 > 解决方案 > compareTo() 方法抛出“此方法必须返回 int”错误,尽管在方法中返回 int

问题描述

我正在为我的计算机科学课程做作业,要求我实现一个 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;
    }
}

标签: javareturn-valuereturn-typecompareto

解决方案


如果返回类型是int,则必须返回一个intthrow异常。只退出没有 a 的方法return将导致编译器错误。

如果您if-else-if有条件,可能会出现没有调用任何块的情况。因此,您应该创建一个else带有return.

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

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

推荐阅读