Как управлять уловами с таким же поведением - PullRequest
4 голосов
/ 09 июля 2011

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

Я хотел бы сделать следующее:

try { anObject.dangerousMethod(); }
catch {AException OR BException e) { /*do something*/ }
catch {CException e) { /*do something else*/ }

Ответы [ 4 ]

4 голосов
/ 09 июля 2011

В JDK 7 есть , но не в более ранних версиях Java. В JDK 7 ваш код может выглядеть так:

try { anObject.dangerousMethod(); }
catch {AException | BException e) { /*do something*/ }
catch {CException e) { /*do something else*/ }
3 голосов
/ 09 июля 2011

Как определено новыми спецификациями Java 7, теперь вы можете иметь.

try { anObject.dangerousMethod(); }
catch {AException | BException e) { /*do something*/ }
catch {CException e) { /*do something else*/ }
2 голосов
/ 09 июля 2011

Java 6 не поддерживает указание блоков catch таким способом. Лучше всего было бы определить суперкласс / интерфейс для этих двух типов исключений и поймать суперкласс / интерфейс. Другим простым решением было бы иметь метод, который содержит логику для обработки этих двух исключений, и вызывать этот метод в двух блоках перехвата.

0 голосов
/ 09 июля 2011

Как насчет определения пользовательского исключения (скажем, DException), которое расширяет как AException, так и BException, затем используйте его в своем коде:

try { anObject.dangerousMethod(); }
catch {DException e) { /*do something*/ }
catch {CException e) { /*do something else*/ }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...