建立自己的 Iterable
要像使用任何介面一樣建立自己的 Iterable,只需在介面中實現抽象方法即可。對於 Iterable
,只有一個叫做 iterator()
。但它的返回型別 Iterator
本身就是一個有三種抽象方法的介面。你可以返回與某個集合關聯的迭代器,也可以建立自己的自定義實現:
public static class Alphabet implements Iterable<Character> {
@Override
public Iterator<Character> iterator() {
return new Iterator<Character>() {
char letter = 'a';
@Override
public boolean hasNext() {
return letter <= 'z';
}
@Override
public Character next() {
return letter++;
}
@Override
public void remove() {
throw new UnsupportedOperationException("Doesn't make sense to remove a letter");
}
};
}
}
使用:
public static void main(String[] args) {
for(char c : new Alphabet()) {
System.out.println("c = " + c);
}
}
新的 Iterator
應該帶有指向第一個專案的狀態,每次呼叫 next 都會更新其狀態以指向下一個專案。hasNext()
檢查迭代器是否在最後。如果迭代器連線到可修改的集合,則可以實現迭代器的可選 remove()
方法,以從基礎集合中刪除當前指向的項。