public void onClick(int row) {
if (mItems.size() <= row) {
return;
}
Action action = mItems.get(row);
}
调用mItems.get()?
是否安全编辑:从崩溃日志开始,row
为-1,然后抛出异常。
编辑:安全写作是:
if (row < 0 || row >= mItems.size()) {
...
}
答案 0 :(得分:0)
ArrayIndexOutofBoundsException是未经检查的异常。因此,java编译器不会检查给定的代码块是否抛出它。
如果抛出此异常,则表示您正在索引数组的边界 - 正如异常的名称所示。
链接讨论已检查和未检查的异常: http://docs.oracle.com/javase/tutorial/essential/exceptions/catchOrDeclare.html
编辑: 在您的特定实例中,是另一个访问mItems的线程吗?因为这可能会使mItems的大小在你检查它的大小和你索引它的那一刻之间发生变化。
答案 1 :(得分:0)
如果问题是,此代码是否会抛出一个ArrayIndexOutOfBoundsException,那么以下情况
如果将负值传递给行,则此代码最终会出现在java.lang.ArrayIndexOutOfBoundsException
中答案 2 :(得分:0)
是的,它看起来很安全。
您的问题似乎并未显示您对特定问题的努力或研究。
您是否尝试使用row
的某些值编译并测试运行代码?
你可以在这样做时自己想出来。
答案 3 :(得分:0)
无论选中还是取消选中,都可以抛出任何类型的异常。
唯一的问题是已检查的编译器强制您处理,但未经检查,如ArrayIndexOutOfBound异常编译器不会抱怨。
在您的代码中,您可以像下面那样抛出它
public void onClick(int row) {
if (mItems.size() <= row) {
throw new ArrayIndexOutOfBoundsException();
}
Action action = mItems.get(row);
}