2015-11-20 3 views
0

У меня есть несколько подобных методов и есть вызовы следующим образом:Объединение нескольких исключений в пользовательских исключений: Оптимизация

methodThrowingException() throws NullPointerException, InterruptedException, TimeoutException { 
<method logic> 
} 

Calling класс:

try{ 
    methodThrowingExceptions(); 
    <some other logic> 
    } 
    catch (NullPointerException npx) { 
     npx.printStackTrace(); 
     log more details... 
    } 
    catch (InterruptedException inx) { 
     inx.printStackTrace(); 
     log more details... 
    } 
    catch (TimeoutException tox) { 
     tox.printStackTrace(); 
     log more details.. 
    } 
  1. Как (если) я могу поставить все эти три в одном пользовательском исключении?
  2. Кроме (1) есть ли способ оптимизации кода, так что мне не нужно писать все те же инструкции для нескольких методов?

ответ

1

Поскольку Java 7, вы можете использовать несколько поймать блок-:

catch (NullPointerException | InterruptedException | TimeoutException e) { 
    e.printStackTrace(); 
    log more details... 
} 

Это сказал, что вы никогда не должны поймать NullPointerException: это ошибка, и если это произойдет, то исключение должно пузыриться , Вы не можете обоснованно ожидать NPE.

Кроме того, сделать то же самое для InterruptedException, как и для других исключений, также очень сомнительно. При перехвате InterruptedException вы должны сбросить прерванный флаг в текущем потоке и остановить то, что вы делаете как можно скорее.

+0

Thanx для ответа. Часть 2 решается этим. Не могли бы вы предложить что-то для части 1. – nullpointer

+0

Я не понимаю, что вы просите в части 1. Вы спрашиваете, как бросить повторное единственное настраиваемое исключение, если вы поймаете любое из этих 3 исключений? –

+0

вид пользовательского исключения, чтобы поймать любое из этих трех исключений в одном и выполнить разные операции для каждого типа. – nullpointer