Java,如何在方法中放入开关盒?

问题描述 投票:2回答:3

我正在尝试在其中具有switch语句的Triangle类中实现getter方法。通常,我会为每个参数一个一个地编写getter方法,但我认为我可以使用switch语句来对其进行优化。

通常是这样;

public double getSide1(){
    return side1;
}

但是每个三角形边要重复三遍。但我想做类似的事情;

public double getSide(int n) {
    switch (n) {
        case 1: return side1; 
        case 2: return side2; 
        case 3: return side3; 
        default: System.out.println("Not a valid side.");
    }
}

由于某种原因,它无法识别转换案例本身的收益。因此,我必须在末尾添加return 0。但是然后返回值为0。

那么我该如何解决?

java methods switch-statement
3个回答
7
投票

问题在您的switch语句的默认情况下:

default: System.out.println("Not a valid side.");

输出错误消息是不够的。

您必须返回一些默认值

default: {
    System.out.println("Not a valid side.");
    return 0;
}

或(最好)在达到默认大小写时引发异常。

default: throw new IllegalArgumentException ("Not a valid side.");

2
投票

...因此,我必须在末尾添加return 0。但是然后返回值为0。

如果您不返回任何东西,那么您已经选择了,抛出一个检查或未检查的异常:

public double getSide(int n) {
    switch (n) {
        case 1: return side1;
        case 2: return side2;
        case 3: return side3;
        default: 
           throw new RuntimeException("Not a valid side.");
    }
}

或:

public double getSide(int n) throws IllegalAccessException {
    switch (n) {
        case 1: return side1;
        case 2: return side2;
        case 3: return side3;
        default:
            throw new IllegalAccessException("Not a valid side.");
    }
}

1
投票

为了避免此问题并遵循最佳实践以减少复杂性,最好只有一个“返回路径”。

例如:

public double getSide(int n) {
    int result = 0;  // default value
    switch (n) {
        case 1: result = side1;
        case 2: result = side2;
        case 3: result = side3;
        default: 
           System.out.println("Not a valid side.");
    }
    return result;
}
© www.soinside.com 2019 - 2024. All rights reserved.