Bla*_*iev 2 java switch-statement indexoutofboundsexception anonymous-arrays
在Java中,我发现以下代码比相应的庞大switch语句更清晰,更易于维护:
try {
selectedObj = new Object[] {
objA,
objB,
objC,
objD,
}[unvalidatedIndex];
} catch (ArrayIndexOutOfBoundsException e) {
selectedObj = objA;
}
Run Code Online (Sandbox Code Playgroud)
反对
switch (unvalidatedIndex) {
case 0:
selectedObj = objA;
break;
case 1:
selectedObj = objB;
break;
case 2:
selectedObj = objC;
break;
case 3:
selectedObj = objD;
break;
default:
selectedObj = objA;
}
Run Code Online (Sandbox Code Playgroud)
前者被认为是可接受的做法吗?我知道它不是最有效的,因为它涉及分配数组和捕获异常.当unvalidatedIndex超出范围时会不会引起不必要的事情(虽然处理了异常)?
如果可能的话,你会建议更清洁吗?
你的第一种方法很好.
但是,最好首先检查索引:
Object[] arr = new Object[] { ... };
if (i < 0 || i >= arr.length)
i = 0;
selectedObj = arr[i];
Run Code Online (Sandbox Code Playgroud)