У меня есть несколько методов:обработка ArrayIndexOutOfBoundsException и инкапсуляция
Это один:
public Page getPage(int index)
{
try
{
return pageList.get(index-1);
}
catch (ArrayIndexOutOfBoundsException e)
{
return null;
}
}
, которая затем вызывается в этом один:
public Page getNextPage(Page page)
{
return getPage(getPageIndex(page)+1);
}
, который, еще раз, называется в другом метод:
.
.
.
Page previousPage = chapter.getPreviousPage(page);
Page nextPage = chapter.getNextPage(page);
if (previousPage == null)
{
if (nextPage != null)
{
nextPage.dummy.setVisible(true);
}
}
.
.
.
Я знаю, что управление ArrayIndexoutOfBoundsException таким образом, как правило, плохо, но я использую его как средство «beforeStart» или «afterEnd», так как я убедился, что только индекс, который может быть передан в качестве аргумента, находится либо в границах массивов, либо выше на один любая сторона. Всякий раз, когда я вызываю первый метод, я выполняю нуль-проверку, и я знаю, на каком конце («beforeStart» или «afterEnd») ожидать исключения. Так что все круто, это неплохой дизайн. Я делаю это, потому что гораздо меньше кода и усилий, чтобы сделать это таким образом, чем проверять индекс каждый раз перед вызовом первого метода.
Однако это не мешает второму или третьему методу выбросить это же исключение.
Есть ли способ каким-либо образом инкапсулировать код, чтобы исключение обрабатывалось в рамках первого метода и что любой другой метод, который его вызывает, даже не знает, что произошли какие-либо исключения?
Вот что происходит, когда происходит исключение:
Как бы то ни было, только первый метод, который вы указали, должен увидеть исключение. – Cruncher
Я добавил картинку. Я не понимаю, почему это происходит. Если я попытаюсь поймать одно и то же исключение в третьем методе, исключение поймано, но это не решает проблему ... – Karlovsky120
Я также попытался напечатать строку текста в разделе catch. Он напечатал линию вместе с трассировкой стека. – Karlovsky120