Construtores não devem lançar nenhuma exceção! Por que?

2 respostas
G

Salve!!
Bom pessoal, quanto mais estudo exceções, mais aparecem as dúvidas. Espero ser um dos meus últimos posts sobre exceções.
Segue a dúvida:

" Por que os construtores não devem lançar nenhuma exceção, exceto IllegalArgumentException? "

Obs.: Desculpem-me por sobrecarrecar o fórum com as dúvidas relativas às exceções. Aproveitei o máximo com os artigos indicados e com as repostas dos colegas. Entretanto, pintaram dúvidas para as quais não encontrei respostas.

2 Respostas

D

Onde vc leu isso??
Lembro que construtor de UnicastObject do RMI lança
uma exceção a RemoteException ,se não me engano.

sergiotaborda

Giminiani:
Salve!!
Bom pessoal, quanto mais estudo exceções, mais aparecem as dúvidas. Espero ser um dos meus últimos posts sobre exceções.
Segue a dúvida:

" Por que os construtores não devem lançar nenhuma exceção, exceto IllegalArgumentException? "

Obs.: Desculpem-me por sobrecarrecar o fórum com as dúvidas relativas às exceções. Aproveitei o máximo com os artigos indicados e com as repostas dos colegas. Entretanto, pintaram dúvidas para as quais não encontrei respostas.

A boa prática de não se lançar exceções no construtor é que vai contra o propósito do construtor.
Se o construtor tem parâmetros e os testa ele vai lançar IllegalArgumentException.
Agora, se o construtor faz mais alguma ação que pode causar erro isso impossibilita a própria criação do objeto e indica que o construtor tem mais responsabilidade do que deveria.
Mas porque um construtor vai acessar recursos de forma a causar exceções se o unico propósito dele é criar um objeto em estado válido ? Para fazer coisas que não sejam apenas criar o objeto, logo incorrendo em uma possivel violação do principio de separação de responsabilidade.

Para resolver o impasse um método construtor pode ser usado. Esse método irá comunicar com quem de direito e prover que as condições para a criação do objeto estejam satisfeitas. O objeto nem começará a ser criado se as condições não forem coerentes.

A resolução prende-se com a boa prática de “Não deixe para os outros o que vc pode lançar primeiro” não deixando a responsabilidade no construtor e sim em um método que o invoca e com “Seja especifico”. O método pode testar muito mais “à vontade” tudo o que precisar sem que o objeto exista em um estado de “limbo”.

Ainda, por outro lado, exceções em construtores podem interferir com a herança de uma forma não prevista por quem criou a classe original. Sobretudo de forem verificadas.

Criado 24 de julho de 2008
Ultima resposta 24 de jul. de 2008
Respostas 2
Participantes 3