Java 缺少带有开关的返回语句

Java 缺少带有开关的返回语句,java,switch-statement,return,Java,Switch Statement,Return,这是我为学校制作的一个课程中的一种方法。 该开关获取一个随机整数,并使用它返回从类AlertStatus派生的特定类的对象 出于某种原因,我不断收到一个错误,上面代码块的第9行(上面代码的最后一行)显示“missing return statement}”。我不明白为什么它会这样说,因为我已经为每种情况提供了返回语句。在默认情况下,您没有返回任何内容。我想你想要像这样的东西 public AlertStatus nextStatus(){ int randNum = randNumGen

这是我为学校制作的一个课程中的一种方法。 该开关获取一个随机整数,并使用它返回从类AlertStatus派生的特定类的对象


出于某种原因,我不断收到一个错误,上面代码块的第9行(上面代码的最后一行)显示“missing return statement}”。我不明白为什么它会这样说,因为我已经为每种情况提供了返回语句。

默认情况下,您没有返回任何内容。我想你想要像这样的东西

public AlertStatus nextStatus(){
    int randNum = randNumGen.nextInt(3);
    switch(randNum){
        case 0: return new AlertStatusGreen();
        case 1: return new AlertStatusYellow();
        case 2: return new AlertStatusRed();
        default: System.out.println("ERROR: no random number.");
    }
}

默认情况下必须返回某些内容。如果您想指示错误,最好的方法是抛出一个指示错误的异常

public AlertStatus nextStatus(){
    int randNum = randNumGen.nextInt(3);
    switch(randNum){
        case 0: return new AlertStatusGreen();
        case 1: return new AlertStatusYellow();
        default: return new AlertStatusRed();
        // default: System.out.println("ERROR: no random number.");
    }
}

如果数字是4,它会返回什么?(是的,数字不能是4,但编译器不够聪明,无法知道这一点)谢谢!这就解决了问题。只是想澄清一下,如果我有在开关中返回某些内容的情况,那么默认情况下也必须返回某些内容?@Bernandion如果您的方法返回某些内容,那么通过该方法的每个可能路径都必须生成一个返回值。它可能是
null
,也可能是抛出
异常。但它没有为您插入说明。编译器无法确定
nextInt(3)
的返回值是否在范围
0-2
内。
public AlertStatus nextStatus(){
    int randNum = randNumGen.nextInt(3);
    switch(randNum){
       case 0: return new AlertStatusGreen();
       case 1: return new AlertStatusYellow();
       case 2: return new AlertStatusRed();
       default: throw new InvalidArgumentException("invalid argument");
    }
}