Iterableで範囲for

Javaで、Iterableを実装すると拡張forが書けることを知ったので
範囲に関するイテレーションのためのクラスRangeを書いてみた。
Rubyほど簡単にはならないが、少し書きやすくなることがわかる。
参考:RubyのRangeクラス
http://www.ruby-lang.org/ja/man/html/Range.html

package hoge;

import java.util.Iterator;
import java.util.NoSuchElementException;

public class Range implements Iterable<Integer> {

	public static void main(String[] args) {
		for(int i : new Range(3,5)){
			System.out.println(i);
		}
		
		for(int i : range(100,200)){
			System.out.println(i);
		}
		
		//0-9
		for(int i : times(10)){
			System.out.println(i);
		}
	}
	
	final int min;
	final int max;
	
	public Range(int min, int max) {
		super();
		this.min = min;
		this.max = max;
	}

	//staticインポートでnewいらず
	public static Range range(int min, int max){
		return new Range(min, max);
	}
	
	//0 - n-1
	public static Range times(int n){
		return new Range(0, n - 1);
	}
	
	@Override
	public Iterator<Integer> iterator() {
		return new Iterator<Integer>(){

			int i = min;
			
			@Override
			public boolean hasNext() {
				return i <= max;
			}

			@Override
			public Integer next() {
				if(!hasNext()){
					throw new NoSuchElementException();
				}
				return i++;
			}

			@Override
			public void remove() {
				throw new UnsupportedOperationException("remove not supported");
			}
			
		};
	}
	
	
	
	public int getMin() {
		return min;
	}

	public int getMax() {
		return max;
	}

}


これで条件i < (max + 1)を書かなくてすむ。
staticインポートすればnewなしで書ける。