Vc não criou sua própria hierarquia de exceptions?
O que o ViniGodoy disse é perfeitamente plausível.
Você esta criando pelo que entendi um framework interno para que os desenvolvedores a utilize. Porque que você não cria sua propria hierarquia de exceção (de repente do tipo checked msmo) que force o desenvolvedor a realizar um catch dela?
Utilizar um try {…} catch (Exception e) {…}, contanto que tenha outros blocos try fazendo a tratativa correta, não é de todo o mal, pois evitaria assim as famosas exceções mascaradas.
Não tenho certeza se entendi direito o seu problema.
Você poderia exemplificar com o seu cenário atual?
Entendi. Mas nesse ponto, infelizmente nao tem o que fazer. Se o desenvolvedor colocar os try…catch(Exception), vai pegar sim a excecao que voce esta propagando.
Talvez a unica forma de voce forcar os desenvolvedores a nao cometer essas praticas, seria voce utilizar plugins de IDEs como PMD e CheckStyle. Do contrario, nao teria o que fazer realmente
A galera ja falou o que tinha que falar
Mas se o desenv que usar o seu framework for fazer péssimo uso do tratamento de excessões, ai é um problema dele sua parte vc fez e fez bem feito.
Eu trabalho em um sistema onde quase tudo dá um catch Exception, dói meus olhos quando vejo isso, mas é a vida.
Acho que o caminho que vc está seguindo está correto… criou suas checked e unchecked exceptions
Olá,
Haveria alguma forma de impedir que um catch(Exception e) capture uma exceção do tipo RuntimeException lançada?
Alguns métodos que estou criando, dependendo da situação lançarão tanto exeções “checkeds” como “uncheckeds” fazendo que o desenvolvedor que está utilizando minha lib faça o péssimo uso de tratamento de exceções (na minha opinião): try {...} catch (Exception e) {...}
Faria com que a RuntimeException que criei não passe, sendo tratada no bloco catch
Uma opção que vi seria disparar um Error, mas acho que isso não seria adequado em termos de modelagem
Aí, só se o ControladorDeTeclado (não dá para chamar de desenvolvedor) usar
para atrapalhar…
A última opção seria usar de meios “subversivos” como uma classe auxiliar que guardasse o erro e “cancelasse” o que o usuário fez após sua execução (teria que alterar a modelagem feita).
Estou trabalhando num framework sim. E foi definida uma hierarquia de exceções. A questão é que existirão exceções que o desenvolvedor poderia tratar e outras que devem impedir a continuidade da operação que ele está utilizando e da qual, não estaria ao encargo dele tratar, mas seria tarefa do framework. É nesse ponto que está o problema, se o desenvolvedor utilizar um bloco catch Exception (e já vi muito tratamento genérico das formas mais bizarras) as exceções que não quero que ele trate (Runtime) seriam tratadas.
Olá pessoal,
Obrigado a todos pela ajuda. Resolví deixar todas as exceções como checked (extends Exception) e os métodos, que os desenvolvedores vão implementar, passam a lançar (throws) a exceção definida. Dessa forma, ao menos, a IDE não vai notificá-los do uso de blocos try-catch para a exceção indicada.
Vou ver no projeto o uso de checkstyle para ver se podemos previnir o uso de catch (Exception). Pelo menos aliviará um pouco os problemas