2015-04-14 2 views
0

Хороший дизайн для исключения исключений в методе, в котором закрытые методы уже улавливают исключение? Например, в следующем коде публичный метод вызывает 2 частных метода. Частные методы уже отлавливать любые исключения и распечатать его:java обработка исключений вложенных методов

/*The only thing this method does is call the enclosed methods.*/ 
public Object enclosingmethod() 
{ 
    try 
    { 
     enclosedmethod1(); 
     enclosedmethod2(); 
    } 
    catch (Exception e) 
    { 
     e.printstacktrace(); 
    } 
} 


private Object enclosedmethod1() 
{ 
    try 
    { 
     //some logic 
    } 
    catch (Exception e) 
    { 
     e.printstacktrace(); 
    } 
} 

private Object enclosedmethod2() 
{ 
    try 
    { 
     //some logic 
    } 
    catch (Exception e) 
    { 
     e.printstacktrace(); 
    } 
} 
+0

Возможно, на самом деле не стоит делать, если закрытый метод не отменяет исключение или не бросает другой – BretC

ответ

0

Нет, это не очень хороший дизайн. И особенно в этом случае это неправильно, потому что вы окружаете вызовы enclosedmethod1 и enclosedmethod2 в блоке catch, но даже не выбрасывают исключение в этих блоках, потому что все Исключения изъяты!

Специально не поймать мать всех исключений, java.lang.Exception.

Но, как всегда, это зависит. Задайте себе вопрос: что должно произойти, когда enclosedmethod1 встречает исключение? Должен ли код продолжать выполнение? потому что, если вы его поймаете, enclosedmethod2 все равно будет выполнен. Должно ли это? Я не могу вам сказать, но, может быть, вы можете, потому что знаете, что должны делать enclosedmethod1 и enclosedmethod2.

Нет ответа на этот вопрос, потому что это зависит от ваших требований.

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

0

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

Если вы используете хорошую среду IDE, они скажут вам, когда вы ненужно ловите исключения (и, альтернативно, когда метод должен поймать конкретное исключение).

Кроме того, как утверждают другие, вы, как правило, не хотите, чтобы вы ловили «Исключение» явно; вы захотите поймать исключения, которые действительно могут быть брошены кодом в блоке try.

0

Да, вы иногда гнездовой метод требует, что исключения улова, а затем также перехватывать исключения в более высоких методов уровня, которые требуют вложенных методов, однако не как вы делаете это, так как вы редко хотите, чтобы поймать исключения, чтобы в целом, и вам не хотелось бы получать то же исключение, которое уже было обработано во вложенном вызове метода, если оно не будет повторно выбрано. Вместо этого гораздо лучше поймать конкретные исключения, в которых они необходимы для обработки, а не для случайного или вообще попытки поймать все исключения во всем мире. Иногда внутренние методы поймают конкретное исключение и затем бросают одно из своих собственных исключений, которое затем должно обрабатываться методами более высокого уровня.

0

Чтобы ответить на ваш вопрос: Нет, это нехорошо, но расточительный дизайн.

Но кстати. он также обескуражен (нет хорошей конструкции), чтобы поймать java.lang.Exception (или даже хуже: Throwable) http://pmd.sourceforge.net/pmd-4.3.0/rules/strictexception.html

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