La interfaz java.lang.Iterator
tiene 3 métodos: hasNext
, next
y remove
. Para implementar un iterador de solo lectura, debe proporcionar una implementación para 2 de ellos: hasNext
y next
.Qué hacer con las excepciones al implementar java.lang.Iterator
Mi problema es que estos métodos no declaran ninguna excepción. Entonces, si mi código dentro del proceso de iteración declara excepciones, debo encerrar mi código de iteración dentro de un bloque try/catch.
Mi política actual ha sido volver a lanzar la excepción incluida en un RuntimeException
. Pero esto tiene problemas porque las excepciones comprobadas se pierden y el código del cliente ya no puede capturar esas excepciones de forma explícita.
¿Cómo puedo evitar esta limitación en la clase Iterator?
Aquí hay un código de ejemplo para mayor claridad:
class MyIterator implements Iterator
{
@Override
public boolean hasNext()
{
try
{
return implementation.testForNext();
}
catch (SomethingBadException e)
{
throw new RuntimeException(e);
}
}
@Override
public boolean next()
{
try
{
return implementation.getNext();
}
catch (SomethingBadException e)
{
throw new RuntimeException(e);
}
}
...
}
Otra opción, si no puede controlar el código del cliente UI: cree un iterador que registre las excepciones en algún lugar accesible por un getter o algo, o llame a una interfaz de devolución de llamada, o algo que controle y pueda mostrar el error en cualquier lugar. Si eso es útil para usted, puede crear un "CatcherIterator" que simplemente envuelve un runtime-exception-thrower-iterator y atrapa todas las excepciones posibles redirigiéndolas a la propiedad o interfaz de devolución de llamada. – helios