我想要一个如下所示的开关语句:
switch (something)
{
case 1:
int a = 3;
...
break;
case 2:
int a = 4;
....
break;
}
这不起作用,因为无法在该范围内重新定义。我看到以下选项:
我真的不喜欢这四个中的任何一个。哪一个是要走的路,或者我错过了最好的解决方案?
我看到了像one这样的问题,建议使用大括号,但它们并不是最好的方法,而是要让它完全发挥作用。
答案 0 :(得分:2)
我猜你正在使用illegalstateexception并使用默认块来捕获任何异常。
default:
doSomething();
break;
oracle style guide不使用大括号。它还说,只要声明没有中断,就应该添加评论。
但是,为了便于阅读和提高可靠性,任何具有多行的内容都可以用大括号包裹而不会降低性能。大括号告诉编译器创建一个新范围并将该代码作为一个块执行。如果你所做的只是改变一个,那么它就没有必要了。如果您可以在没有大括号的一行上编写switch case语句,请执行此操作。 java中的许多内容都不在一行实例中包括if语句。
接下来,您可以重新定义需要在switch语句之外的语句中重用或设置的任何变量。这将是最小化整数持续实例化的最佳实践。
如果有多行,你应该尝试制作一些方法,然后使用:
int a=0;
switch (something)
{
case 1:{
a = 3;
...
break;
}
case 2:{
a = 4;
....
break;
}
default:
{
try{
throw new IllegalStateException();
}catch(IllegalStateException e)
{
e.printStackTrace();
}
}
}
答案 1 :(得分:1)
支撑是正确的方法。 {}创建一个新的范围,这正是你想要的。
答案 2 :(得分:0)
您也可以使用Map:
Map<Integer, Integer> caseMap = new HashMap<Integer, Integer>() {{
put(1, 3);
put(2, 4);
}};
int a = caseMap.get(something);