如果要想迭代一個類的對象,那么該類必須實現 Iterable 接口,然后通過 iterator 方法返回一個 Iterator 實例。
Range 類實現了Python中的range的所有用法,如:range(10),range(5, 10),range(10, 0, -1),range(0, 10, 2)
如果再在 Range 類中定義靜態的工廠方法,然后再靜態導入工廠方法,就可以更方便地使用了。
使用實例:
for (int x : new Range(10, 0, -1)) { System.out.println(x); } /* 輸出: 10 9 8 7 6 5 4 3 2 1 */
代碼:
class Range implements Iterable<Integer> { private final int start; private final int end; private final int step; public Range(int end) { this(0, end, 1); } public Range(int start, int end) { this(start, end, 1); } public Range(int start, int end, int step) { this.start = start; this.end = end; this.step = step; } @Override public Iterator<Integer> iterator() { return new Itr(); } private class Itr implements Iterator<Integer> { int current = start; @Override public boolean hasNext() { return step > 0 ? current < end : current > end; } @Override public Integer next() { int t = current; current += step; return t; } } }