【问题标题】:Traversing an ArrayList with an Iterator and setting an object with instanceof使用 Iterator 遍历 ArrayList 并使用 instanceof 设置对象
【发布时间】:2020-02-18 01:25:22
【问题描述】:

我有一个对象的 ArrayList 和一个遍历它们的迭代器。我试图在列表中找到 Ant 对象的实例并将其分配给 ant 变量。

while(iterator.hasNext()) {
    if(iterator.getNext() instanceof Ant) {
        Ant ant = (Ant)iterator.getNext();
    }
}

由于 iterator.getNext() 在调用时会增加迭代器,所以上面的代码将 ant 之后的对象赋值给 ant 变量。我想知道如何正确地将列表中的 Ant 对象分配给 ant 变量。

【问题讨论】:

    标签: java arraylist iterator


    【解决方案1】:

    您调用了两次.getNext(),因此实际上是在您检查的对象之后投射对象。

    试试这个:

    while(iterator.hasNext()) {
      Object obj = iterator.next();
      if (obj instanceof Ant) {
        Ant ant = (Ant)obj;
      }
    }
    

    另外需要注意的是,在迭代器中检索底层对象的是.next()而不是.getNext()

    【讨论】:

      【解决方案2】:

      它发生是因为您两次调用iterator.getNext():第一次是在条件中,然后是在条件体中,所以您错过了第一个值并尝试第二个 Ant 类型。你需要这样的代码

      while(iterator.hasNext()) {
                  Object obj = null; 
                  if((obj = iterator.getNext()) instanceof Ant) {
                      Ant ant = (Ant)obj;
                  }
      } 
      

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-04
      • 2015-07-22
      • 1970-01-01
      • 1970-01-01
      • 2012-12-10
      • 2023-03-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多