在Java中,我发现下面的代码更清洁和更容易保持比相应的笨重switch
声明:匿名数组索引而不是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
超出范围(虽然处理异常)时会引起不希望的情况吗?
如果可能,你会建议一些更清洁的东西吗?
不错,但是这会污染名字空间,只用一次额外的标识符'arr'。另一方面,如果使用匿名数组,'arr.length'可以用常量'4'替代,但是会导致维护成本始终保持不变并且数组同步。我知道我听起来很挑剔,但我出于好奇而问这个。 – 2011-06-06 14:18:06
@Blagovest:用'{}'包装它来创建一个内部作用域并隐藏这个变量。或者创建一个'static'函数,它接受一个索引和一个'Object ...'并返回一个对象。 – SLaks 2011-06-06 14:23:29