匿名数组索引而不是switch语句?

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超出范围时会不会引起不必要的事情(虽然处理了异常)?

如果可能的话,你会建议更清洁吗?

SLa*_*aks 5

你的第一种方法很好.

但是,最好首先检查索引:

Object[] arr = new Object[] { ... };

if (i < 0 || i >= arr.length)
    i = 0;
selectedObj = arr[i];
Run Code Online (Sandbox Code Playgroud)