【问题标题】:Enhance for loop throwning IndexOutOfBounds Exception增强循环抛出 IndexOutOfBounds 异常
【发布时间】:2014-04-03 18:40:09
【问题描述】:

我在我的 android 应用程序中使用增强 for 循环来迭代状态对象列表。

 for (Status stat : status)
timelineItems.add(new TimelineItem(stat));

这会产生以下 IndexOutOfBoundsException: java.lang.IndexOutOfBoundsException: 无效索引 0,大小为 0

我意识到发生这种情况是因为 ArrayList 的大小为 0,这意味着它是空的。我的问题是为什么它甚至一开始就进入循环不是为了保证不会发生这些问题而创建的增强 for 以及如何阻止它。

【问题讨论】:

  • 您需要包含堆栈跟踪以及更多相关代码。我最初的回答是,你一定是误读了证据。
  • 不确定但增强的 for 也会在列表为空时抛出 npe ,而不是仅仅不循环。 IMO 一个非常烦人的“功能”
  • 不知道为什么,但如何阻止这种情况只需在其中添加 if(status.length > 0) 语句。
  • @mastercork 这应该没有必要。

标签: java android indexoutofboundsexception


【解决方案1】:

首先:如果您使用的是ArrayList,Android 上的Don't use enhanced for loop。它比普通的慢,并且使用更多的内存。对于所有其他集合,没关系。

您遇到的情况可能与集合的非同步修改有关。如果在循环运行时大小突然改变,就会导致类似的错误。

【讨论】:

    【解决方案2】:

    发生这种情况的唯一方法是,如果其他人(另一个线程)在执行增强的 for 循环时清除了集合。它确定有第零个元素,但当它访问它时,它已被删除。

    【讨论】:

      猜你喜欢
      • 2013-06-23
      • 2014-05-10
      • 2020-10-09
      • 1970-01-01
      • 1970-01-01
      • 2013-05-13
      • 1970-01-01
      • 1970-01-01
      • 2013-08-01
      相关资源
      最近更新 更多