В этот момент может быть обнаружено исключение, если
Object o = (Object)iter.next();
или
System.out.println(o.hashCode());
сгенерирует непроверенное исключение.Вот несколько возможностей:
Если вы ранее вызывали addObject(null)
, вызов update()
привел бы к исключению NullPointerException, когда он вызывает hashCode()
на null
ссылка.
Если у вас есть экземпляр Foo
, совместно используемый двумя потоками, и один вызывает addObject
, а другой вызывает compute()
, тогда вы можете получить ConcurrentModificationException
.
Если Vector
был пользовательским классом, а не java.util.Vector
, то iter.next()
может вызвать другое неконтролируемое исключение ... по желанию автора указанного пользовательского класса.(ОК ... маловероятно в свете комментариев ОП.)
(из ответа Экс) - o.hashCode()
теоретически может выдать любое непроверенное исключение, в зависимости от того, как o
Класс реализует метод hashCode()
.
Могут быть и другие возможности.
Если вам просто любопытно, какк тому, что могут быть возможные исключения, выше более или менее охватывает его.
Если вы хотите привести в порядок этот код, то, вероятно, плохо поймать Exception
в этот момент.Каждый из перечисленных случаев является признаком ошибки здесь или в другом месте приложения.Вместо того, чтобы поймать исключение в этот момент и (предположительно) попытаться «исправить» проблему, лучше выполнить бомбардировку с помощью трассировки стека, а затем вернуться назад и исправить скрытую корневую проблемууловом.