在Java中,我发现以下代码比相应的笨重的switch语句更干净,更易于维护:

try {
  selectedObj = new Object[] {
    objA,
    objB,
    objC,
    objD,
  }[unvalidatedIndex];
} catch (ArrayIndexOutOfBoundsException e) {
  selectedObj = objA;
}


反对

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;
}


前者是否可以接受?我知道这不是最高效的方法,因为它涉及分配数组和捕获异常。当unvalidatedIndex超出范围时(尽管已处理了异常),是否会引起某些不良情况?

如果可能的话,您会建议更清洁的东西吗?

最佳答案

您的第一种方法很好。

但是,最好先检查索引:

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

if (i < 0 || i >= arr.length)
    i = 0;
selectedObj = arr[i];

09-15 14:54