java - 如何处理游戏中的ArrayIndexOutOfBoundsException

标签 java error-handling

处理 ArrayIndexOutOfBoundsException 的好方法是什么?对于这个案例。还是忽略它?

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

这样的错误不应该发生。属性的数量在项目中是固定的。这意味着我总是知道有多少。我有一个HashMap<String, String>及其名称和描述

有点跟进:

Throw Exception or prevent it?

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

最佳答案

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

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

使用 assert 确保不违反前提条件和不变量。 assert 不应用于检查“正常”错误条件,但它适合调试/开发健全性检查。它 self 记录了您的假设。此外,它还允许在这里捕获错误,而不是在最终捕获异常的某个模糊的更高级别。这可以帮助您更快地查明问题。

有关更多信息、一些解释和示例,请查看 programming with assertions .

Avoiding != null statements 上也有一个相关问题- 相关之处在于答案讨论了对假设的过于激进的检查,以及如何有效地处理它们;一本好书。

但是:请务必注意,您的方法是public。这里的含义是任何人都可以调用它。也许您将来甚至会在另一个程序中使用此代码。在决定是否要抛出 AIOOB 时,您需要考虑这一点。如果这样做,我会将其从方法中抛出,并将该方法记录为在 index 超出范围时抛出它。这实际上取决于您的情况。

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

关于java - 如何处理游戏中的ArrayIndexOutOfBoundsException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27157596/

相关文章:

java - spring json 写入的 json 比我想要的多

java - 打印不带任何0的字符串

asp.net-mvc-3 - 如何处理MVC3中的异常?

ionic-framework - 在 Windows 10 上安装 ionic 和 cordova

java - 如何为类成员使用 .setTimeZone?

java - Aerospike 的单元测试

java - 最快的高斯模糊实现

java - 如何在 Java 中创建对象对或组织我的代码

java - 在地址数组中循环?

在 C 中捕获段错误