如何在游戏中处理ArrayIndexOutOfBoundsException

时间:2014-11-26 19:42:02

标签: java error-handling

对于这种情况,处理ArrayIndexOutOfBoundsException的好方法是什么。或者忽略它?

public Attribute getAttribute (int index) {
    return attributes.get(index);
}

不应该发生这样的错误。属性的数量在项目中是固定的。意思是我总是知道有多少。我有HashMap<String, String>的姓名和说明

稍后跟进:

Throw Exception or prevent it?

对于这种情况,可接受的错误处理是什么?还是完全没必要?

1 个答案:

答案 0 :(得分:1)

如果不按照方法的不变量和前提条件发生这种情况,则不需要处理异常。如果您想检查以确保在开发过程中没有出现错误,通常您会使用assert来执行以下操作:

public Attribute getAttribute (int index) {
    assert(index >= 0 && index < attributes.size());
    return attributes.get(index);
}

使用assert确保不违反前置条件和不变量。 assert不应该用于检查&#34;正常&#34;错误条件,但它适用于调试/开发完整性检查。它会自我记录您的假设。此外,它将允许在此处捕获错误,而不是在最终捕获异常的某些模糊的更高级别。这可以帮助您更快地查明问题。

有关详细信息,一些说明和示例,请查看programming with assertions

Avoiding != null statements还有一个相关的问题 - 相关的答案是讨论过度激进的假设检查,以及如何有效地处理这些假设;好读。

然而:请注意您的方法为public,这一点非常重要。这里的含义是任何人都可以称之为。也许您将来甚至会在其他程序中使用此代码。在决定是否要抛出AIOOB时,您需要考虑这一点。如果你这样做,我会把它扔出方法,并在index超出范围时将方法记录为抛出它。这取决于你的情况,真的。

同样正如Christian Hujer在下面的评论中提到的那样,一套好的测试套件将有助于确保您的代码在任何错误中都不会让您感到惊讶。