Em Java, eu quero fazer algo assim:
try {
...
} catch (/* code to catch IllegalArgumentException, SecurityException,
IllegalAccessException, and NoSuchFieldException at the same time */) {
someCode();
}
...ao invés de:
try {
...
} catch (IllegalArgumentException e) {
someCode();
} catch (SecurityException e) {
someCode();
} catch (IllegalAccessException e) {
someCode();
} catch (NoSuchFieldException e) {
someCode();
}
Há alguma maneira de fazer isso?
java
exception
try-catch
multi-catch
froadie
fonte
fonte
bitwise or
(|
)? Por que não usar uma vírgula, ou o operador que tem um significado mais semelhante, ological or
(||
)?Não exatamente antes do Java 7, mas eu faria algo assim:
Java 6 e anterior
Java 7
fonte
exc.getCause()
. Como uma observação lateral, Robert C. Martin (entre outros) recomenda o uso de exceções não verificadas (o compilador não tem idéia de que tipo de exceção será lançada a partir daí); consulte o Capítulo 7: Tratamento de erros em seu livro Código limpo .throw exc
vez dethrow new RuntimeException(exc)
?No Java 7, você pode definir várias cláusulas de captura, como:
fonte
Se houver uma hierarquia de exceções, você poderá usar a classe base para capturar todas as subclasses de exceções. No caso degenerado, você pode capturar todas as exceções de Java com:
Em um caso mais comum, se RepositoryException for a classe base e PathNotFoundException for uma classe derivada, então:
O código acima capturará RepositoryException e PathNotFoundException para um tipo de tratamento de exceção e todas as outras exceções são agrupadas. Desde o Java 7, conforme a resposta de @ OscarRyz acima:
fonte
Não, um por cliente.
Você pode capturar uma superclasse, como java.lang.Exception, desde que execute a mesma ação em todos os casos.
Mas essa pode não ser a melhor prática. Você só deve capturar uma exceção quando tiver uma estratégia para lidar com isso de verdade - e o registro e a repetição não estão "lidando com isso". Se você não tiver uma ação corretiva, é melhor adicioná-la à assinatura do método e deixar que ela borbulhe para alguém que possa lidar com a situação.
fonte
Uma alternativa mais limpa (mas menos detalhada e talvez não a preferida) à resposta do usuário454322 no Java 6 (ou seja, Android) seria pegar todos os se
Exception
voltar a jogarRuntimeException
. Isso não funcionaria se você estiver planejando capturar outros tipos de exceções além da pilha (a menos que você também as jogue novamente), mas efetivamente capturará todas as exceções verificadas .Por exemplo:
Dito isto, para maior detalhamento, pode ser melhor definir uma variável booleana ou outra variável e, com base nisso, executar algum código após o bloco try-catch.
fonte
No pré-7, que tal:
fonte
caught
em umfinally
bloco?Sim. Aqui está o caminho usando o separador pipe (|),
fonte
Para o kotlin, não é possível por enquanto, mas eles consideraram adicioná-lo: Source
Mas, por enquanto, apenas um pequeno truque:
fonte
Capture a exceção que é uma classe pai na hierarquia de exceções. Naturalmente, isso é uma má prática . No seu caso, a exceção pai comum passa a ser a classe Exception, e capturar qualquer exceção que seja uma instância de Exception é realmente uma prática ruim - exceções como NullPointerException geralmente são erros de programação e geralmente devem ser resolvidas verificando-se valores nulos.
fonte