[quote=albama@bol.com.br]Vejam nest simples exemplo, de quem é a responsabilidade de trata essa exceção ?
Ela pertence as Exception sem as de RuntimeException.
public int stringToInt(String value) throws NumberFormatException{
//codigo
};
Ao chamar o método stringToInt() , o desenvolvedor é obrigado a tratar a exceção, caso contrario dará erro de compilação.
Isso acontece devido a presençaa da clausula throws na declaração de método e a checkagem de NumberFormatException.
Neste caso a responsabilidade é de quem chama o método e não de quem codificou.
Vocês acham correto isso ?
Marco Aurélio
[/quote]
c vc extender RuntimeException não é obrigado a tratar cada chamada de método por Try{}catch{}finally{} … pois isso quer dizer, que estas exceções ocorrerão apenas em tempo de execução, podendo o programador escolher não tratalas em código em algum trecho…
…
O ideal é vc deichar o responsavel tratar, vou te dar um exemplo… c vc tem 1 classe que mexe na persistencia do banco, lida diretamente no banco, quando alguem pede pra inserir dados, essa classe vai simplismente infiar o dado no banco, se o dado não entrar pq ta duplicado, ele vai jogar o erro pra cima, e isso e o correto, essa classe que trata o banco, não tem q entender do seu negocio, e por isso não tem que testar c o dado é ou não duplicado, só deve lançar uma exceção legível…
Digamos que vc tenha uma classe intermediaria e mediadora (um repositorio generico por exemplo) … que aceite comandos do tipo
add(Object obj) para adcionar a data base … e nessa calsse ele verifique pela calsse do objeto, a qual responsavel mandar para montar a SQL correspondente… apesar desta classe invocar o método da classe anterior de adcionar ao banco, de forma implicita, ela também não entende nada do negocio, então ela passa a informação, tenta inserir, deu erro ela devolve o erro pra cima e pronto…
La em cima tu tem uma classe que conversa com usuario, onde ele pede uma inserção no banco, vc tenta inserir e da a exceção de duplicação, nessa hora vc tem q tratar e falar pro usuario algo como, desculpe esse dado já existe e não é possivel duplicação para o campo X, assim vc mantem a integridade…
…
por outro lado, todas essas etapas podem testar coisas como a nulidade de algum registro, visto a facilidade dessa rotina, evitando enviar uma variável nula camadas mais abaixo onde ela sabe que ocorrerá um erro…
Por exemplo, o repositoio generico, sabe que a classe que lida diretamente com a persistencia não aceita objetos nulos, e ela sabe verificar se um objeto é nulo, então ela pode fazer a verificação, e devolver a exeção, sem ter que descer mais a fundo no código, enfim é tudo uma questão de ver quem é responsavel pelo que mesmo.