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 ?