Интерфейс java.lang.Iterator
имеет 3 метода: hasNext
, next
и remove
. Чтобы реализовать итератор, доступный только для чтения, вы должны предоставить реализацию для двух из них: hasNext
и next
.
Моя проблема в том, что эти методы не объявляют никаких исключений. Поэтому, если мой код внутри процесса итерации объявляет исключения, я должен заключить свой итерационный код внутри блока try/catch.
Моя текущая политика заключалась в том, чтобы перестроить исключение, заключенное в RuntimeException
. Но у этого есть проблемы, потому что проверенные исключения теряются, и клиентский код больше не может поймать эти исключения явно.
Как я могу обойти это ограничение в классе Iterator?
Вот пример кода для ясности:
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);
}
}
...
}