我正在尝试在其中具有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。
那么我该如何解决?
问题在您的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.");
...因此,我必须在末尾添加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.");
}
}
为了避免此问题并遵循最佳实践以减少复杂性,最好只有一个“返回路径”。
例如:
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;
}