我有一个对象的ArrayList和一个遍历它们的迭代器。我正在尝试在列表中找到Ant对象的实例,并将其分配给ant变量。
while(iterator.hasNext()) {
if(iterator.getNext() instanceof Ant) {
Ant ant = (Ant)iterator.getNext();
}
}
由于iterator.getNext()在调用时会递增迭代器,因此上述代码将ant之后的对象分配给ant变量。我想知道如何正确地将列表中的Ant对象分配给ant变量。
答案 0 :(得分:1)
您两次调用.getNext()
,因此实际上是在检查对象之后投射对象。
尝试一下:
while(iterator.hasNext()) {
Object obj = iterator.next();
if (obj instanceof Ant) {
Ant ant = (Ant)obj;
}
}
还应注意,在迭代器中检索基础对象是.next()
而不是.getNext()
。
答案 1 :(得分:-1)
之所以发生这种情况,是因为您两次调用iterator.getNext()
:第一次在条件处,然后在条件体中,所以您错过了第一个值,然后尝试使用第二个Ant类型。您需要类似
while(iterator.hasNext()) {
Object obj = null;
if((obj = iterator.getNext()) instanceof Ant) {
Ant ant = (Ant)obj;
}
}