对Joe和他的网站javapapers.com给予应有的信用,
我需要解释在浏览java中的迭代器时遇到的以下代码
package com.javapapers;
import java.util.ArrayList;
import java.util.Iterator;
public class AnimalIterator<String> implements Iterator<Object> {
private ArrayList<?> animal;
private int position;
public AnimalIterator(Animal animalBase) {
this.animal = animalBase.getAnimal();
}
@Override
public boolean hasNext() {
if (position < animal.size())
return true;
else
return false;
}
@Override
public Object next() {
Object aniObj = animal.get(position);
position++;
return aniObj;
}
@Override
public void remove() {
animal.remove(position);
}
}
package com.javapapers;
import java.util.ArrayList;
import java.util.Iterator;
public class Animal implements Iterable<String> {
private ArrayList<String> animal = new ArrayList<String>();
public Animal(ArrayList animal){
this.animal = animal;
}
public ArrayList getAnimal() {
return animal;
}
@Override
public Iterator<String> iterator() {
return new AnimalIterator(this);
}
}
package com.javapapers;
import java.util.ArrayList;
public class TestIterator {
public static void main(String args[]) {
ArrayList<String> animalList = new ArrayList();
animalList.add("Horse");
animalList.add("Lion");
animalList.add("Tiger");
Animal animal = new Animal(animalList);
for (String animalObj : animal) { ??
System.out.println(animalObj); ??
}
}
}
我的疑问是在??,这里我们定义for循环迭代定义的动物对象,但我不明白Iterator是如何在这里使用的。
源
答案 0 :(得分:0)
表达式:
for (Type item : items) {
}
在Java中称为 foreach-loop 。它适用于实现Iterable<T>
的每种类型。它可以翻译成:
for (Iterator<Type> iter = items.iterator(); iter.hasNext(); ) {
Type item = iter.next();
}
因此,迭代器被隐式使用,在 foreach-loop 中对你的眼睛是不可见的。