Range , Interval e Iterator

Eu estava implementando um Range como uma classe que contem um inicio e um fim.

Um intervalo não é muito difernete de um Range à primeira vista e poderia ser definido da mesma forma. Aliás eu estava fazendo TimeInterval extends Range

O Groovy define Range como a mesma coisa mas define uma iteração sobre os elementos.
Em groovy todos os objetos tem um plus e minus logo todos podem ser iterados em tese.
Em java não temos isso, mas um Range de Number por exemplo, poderia ser iterável. Mas ai surge o problema
Um Range de Double é diferente de um Range de Integer.

Procurando no google entende-se que a definição da palavra “intervalo” comporta o conceito de que o subtrato é denso e portanto não iterável. A minha ideia era pensar em Range com um intervalo iterável num subtrato iterável (básicamente, Integer e Date) criando um Incrementador para incluir a regra de incrementação e depois poder fazer coisas como range.iterator() ou for (Integer i : range)

Mas ai Range seria uma subclasse especial de Intervalo algo como
Range extends Interval implements Iteratable

A outra opção era range sempre ter um .iterator() mas lançar uma exceção se o subtrato é denso não iterável.

Opiniões ?

Bom, depois de brincar um bocado com o codigo cheguei à conclusão que se é para iterar então tem que haver sempre um passo minimio. No caso de inteiros é 1 e no caso de double é 1 tb. Basta dar a opção de mudar isso

Range<Integer> a =  Range.over(1,4); // range inteiro
Range<Double> b = Range.over(1.2,4.5,0.1); // range double com passo 0.1

asserTrue(a.contains(3));

asserTrue(b.contains(1.45678));


for (Integer i : a){
     count++;
}