在Java中,一般而且在下一个例子中请求宽恕而非许可是一种好习惯吗?
示例是:
try {
Cell value = array2D[rowIndex][columnIndex];
}
catch (ArrayIndexOutOfBoundsException e) {}
正如您在上面的代码中看到的那样,我们从value
中获得了array2D
。如果value
超出范围,我们什么都不做。
我问这个问题,因为在某些情况下实现EAFP
要比LBYL
(在跳跃之前看)要容易得多(例如在{{中查找给定Cell
的所有邻居1}})。
答案 0 :(得分:3)
您可以通过检查数组的大小来避免抛出异常的开销:
if(rowIndex < array2D.length)
{
if(columnIndex < array2D[rowIndex].length)
{
// you are safe here
}
}
答案 1 :(得分:3)
不,由于以下几个原因,这不是一个好主意:
if
的运行时性能远远优于try
... catch
catch
es 答案 2 :(得分:1)
我个人认为使用try catch而不是获取数组长度是一种可怕的做法; Exception
(s)用于特殊情况,数组的长度是字段
if (rowIndex < array2D.length && columnIndex < array2D[rowIndex].length) {
Cell value = array2D[rowIndex][columnIndex];
// ...
} else {
break;
}