问题是它是否优先于Throw
和exception
,还是防止它发生。这是一个游戏项目。
IndexOutOfBoundsException
与编码相关。
我有List<E>
private Attribute<List> attributes;
按索引获取项目的方法。
public Attribute getAttribute (int index) {
if (index < 0 || index >= attributes.size())
index = 0;
return attributes.get(index);
}
在这种情况下,我默认为列表的第一个元素。
答案 0 :(得分:8)
快速失败通常是一个好主意:如果将-1的索引传递给该方法,则可能意味着调用该方法的代码中存在错误。如果您默默使用index = 0,(a)调用代码可能无法收到预期的结果,(b)您可能不会注意到该错误,直到它变得非常混乱。
所以我只想使用:
public Attribute getAttribute (int index) {
return attributes.get(index);
}
如果需要,将抛出异常。如果调用此方法的代码没有错误,则永远不应抛出该异常。
答案 1 :(得分:4)
在这种情况下,假装索引存在并且与第一个元素是相同的元素会让人感到困惑并且可能导致细微的错误。
如果索引超出范围,我会抛出IndexOutOfBoundsException
。请注意,调用此函数的其他代码必须准备好捕获此异常并对其进行适当处理。
答案 2 :(得分:1)
答案是高度情境化的。通常,您希望尽可能优雅地处理异常。也就是说,尝试尽可能地解决/忽略它们。 IndexOutOfBoundsException通常是不可能的例子。
因例外而导致的艰难休息是最后的手段。只有当您的 无法
时,才能执行此操作。这个问题的答案有很好的帖子。 When to throw an exception?