Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Construtores e exceções

Conceitualmente é correto comparar a função dos construtores e das excessões "checked", uma vez que assim como os construtores obrigam a inicialização de certos atributos do objeto (ou mesmo a inicialização da referencia à um objeto no caso da composição), as exceções checked obrigam o programador a tratar imediatamente daquela exceção?

2 respostas

Fala Nícolas, tudo bem ?

Na minha opinião, não é correto. Além de o uso de construtores e uso de lançamentos de exceptions terem fins totalmente diferentes na linguagem (o que na minha visão já limita comparações), é preciso destacar que no caso de construtores estamos impondo condições para a instanciação de uma classe, e podemos ter diversas formas disso - podemos ter inúmeras sobrecargas de construtores com formas distintas de construir um objeto (recebendo quaisquer parâmetros), inclusive com a forma padrão, o que ainda possibilita obter a instância a partir de new Classe();. O que difere bastante do mecanismo de check de exceeptions, que vai garantir em compilação que o desenvolvedor trate em qualquer que seja o local a exception.

O que podemos afirmar é que impor um (ou mais) construtor parametrizado, obriga o desenvolvedor a seguir um padrão na hora de instanciar um objeto dessa classe, dando erro de compilação no caso contrário, erro de compilação que também vai ser gerado se o desenvolvedor lançar uma exception do tipo checked e não tratar em algum ponto do código. São operações e usos, que podem obrigar o desenvolvedor a seguir um padrão, tendo o compilador como garantidor, mas assim como outras várias práticas, usos, operações e etc que a linguagem disponibiliza. Acho difícil comparar função de coisas tão distintas, podemos apenas afirmar que em alguns casos elas podem ter a característica em comum de obrigar uma escrita correta por parte do desenvolvedor.

Espero ter ajudado no pensamento. Abraço!

solução!

Sim, os dois tem o mesmo propósito.

Muitas coisas na linguagem Java tem esse intuito de trazer para o momento da compilação a obrigação do programador explicitar um comportamento, ao invés de deixar para a hora da execução.

Alguns exemplos são as classes abstratas, as interfaces e até mesmo a própria tipagem forte. Todas essas coisas trazem alguma responsabilidade específica para o programador na hora da compilação, com o intuito de deixar a linguagem mais robusta e/ou criar novas possibilidades de modelagem.

Edit: E também concordo com tudo que o Rafael falou. Resumindo, a comparação é meio perigosa, dado que as estruturas têm funções completamente diferentes. Como a pergunta é mais filosófica, o "sim" ou o "não" não é tão importante, mas sim a discussão posterior.