switch/case声明中是否有“after”子句的等价物?java

pbpqsu0x  于 2021-06-27  发布在  Java
关注(0)|答案(2)|浏览(354)

我想知道是否有一种方法可以通过java中的switch/case操作符在每一段的末尾执行一个过程(以环路中的开关为例)
类似这样的“after”操作符(它执行:

switch (constant) {
    case a: return "x";
    case b: return "y";
    case c: return "z";
    default: return "unknown";
    after: alwayPassInThisMethodAfterBreakStatement()
}

由于“return”操作,我不能简单地在switch case语句之后编写操作,并且由于上下文的原因,我不能使用“break”操作而不是“return”。

lmyy7pcs

lmyy7pcs1#

switch case语句中没有after或finally。你可以构建一个if-else,比如:

if(yourvar==a) {
  Alwaysmethod();
  return x;
} else if(yourvar==b) {
  Alwaysmethod();
  return y;
} else if(yourvar==c) {
  Alwaymethod();
  return z;
} ..

但这毫无意义。你可以把这个方法放在你的switch case之后或者你返回的任何地方,这样它就会一直被执行。

ryhaxcpt

ryhaxcpt2#

您可以使用try finally来保证after方法被调用,这样可以避免每个分支重复调用。例子:

try {
        switch (constant) {
           case 1: return "x";
           case 2: return "y";
           case 3: return "z";
           default: return "unknown";
        }
    } finally {
        alwaysCalledAtEnd();
    }

相关问题