2010-01-06 4 views
1

Так я использую HtmlUnit и подпись метода выглядит так:как обрабатывать исключения в Java

public HtmlAnchor getAnchorByText(String text) 
          throws ElementNotFoundException 

Таким образом, это означает, что вызов этого метода не просто возвращает нуль, но он будет бросать исключение.

(Я нахожу это боль !!, в C# методы обычно просто возвращает нуль, если не найден, способ проще, если я не что-то ?? отсутствует)

Так что я должен обернуть этот вызов в виде исключения, если Я не хочу, чтобы мое приложение рушилось?

Как это сделать на Java?

ссылка: http://htmlunit.sourceforge.net/apidocs/index.html

+2

Не забывайте, что иногда null является допустимым возвращаемым значением, поэтому вы не можете всегда использовать его для обозначения проблемы. Или может быть более чем одна вещь, которая может пойти не так, поэтому возврат null не достаточно, чтобы рассказать вам, в чем проблема. Наверное, я пытаюсь сказать, что вы будете счастливее, если сможете понять, как использовать исключения, а не рассматривать их как обруч, который нужно перепрыгнуть. – David

+0

Также обратите внимание, что только потому, что он может быть выброшен (в предложении «throws» указывается, что исключение исключается) не означает, что оно будет * будет * быть. –

ответ

6

Имейте в виду, что ElementNotFoundException is не проверенное исключение, чтобы вы могли его игнорировать. Но если элемент, который не существует, является допустимым случаем, в котором вы не хотите, чтобы в него было добавлено исключение, тогда вам придется обернуть код в блок try-catch и обработать его.

Я также считаю этот вид контроля потока за исключения болезненным. Основная конструкция вы хотите:

HtmlAnchor anchor = null; 
try { 
    htmlAnchor = getAnchorByText(text); 
} catch (ElementNotFoundException) { 
    // do nothing 
} 

Если вы оказываетесь писать эту последовательность много затем обернуть его в вспомогательном методе:

public static HtmlAnchor myFindAnchor(String text) { 
    try { 
    return getAnchorByText(text); 
    } catch (ElementNotFoundException) { 
    return null; 
    } 
} 

и называют, что вместо того, чтобы засорять ваш код с поддельным пытаясь угадать блоки блокировки.

1

- Edit:

ответ Знакомства Клетуса; Я предположил, что это проверенное исключение из-за описания OP.

- Старый ответ:

Вы просто поставить попробовать/поймать вокруг него (или повторно выбросить его из вашего метода).

Они называются «проверенными» исключениями на Java и обычно считаются ошибкой :) (но это не стоит обсуждать здесь).

try { 
    getAnchorByText(,,,) 
} catch (ElementNotFoundException enfe) { 
    /// 
} 

или броски:

public void myFoo (...) throws ElementNotFoundException 

Идея заключается в том, что вы не должны пройти исключения до мест, которые не могут справиться с ними, хотя (или, по крайней мере, завернуть его в чем-то они могут иметь дело). Вы пытаетесь ограничить исключения в разных «уровнях» в своем приложении.

+1

Потому что, только если он проверен, вам нужно обращаться с ним конкретно, о чем он жалуется. –

+0

Я думаю, что есть некоторые допустимые варианты использования проверенных исключений, но да, они, как правило, злоупотребляют. –

+0

notnoop: См. Мое измененное правление. Нет никакого смысла продолжать эту дискуссию. –

Смежные вопросы