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

Programar defensivamente?

O instrutor Paulo fala em algum momento da aula(13:29) sobre programar defensivamente onde ele fala que devemos verificar os parâmetros dos nossos construtores.

Pelo que eu entendi o código ficaria assim:

public Aula(String titulo, double duracao) {
        if (titulo == null) {
            throw new IllegalArgumentException("Título não pode ser NULL");
        }
        if(duracao <= 0) {
            throw new IllegalArgumentException("Duração da aula deve ser maior que zero");
        }
        this.titulo = titulo;
        this.duracao = duracao;
    }

Uma vez que estou lançando essas exceções, mesmo que não seja obrigatório trata-las, pois são unchecked, seria boa prática usar o try catch nelas no método main? A mesma regra vale para os sets? e se tiver um construtor com muitos parâmetros, seria melhor eu criar métodos sets privados(caso eu não precise deles fora da classe) e lançar as exceções dentro de cada um e então chamar esses sets dentro do construtor?

3 respostas

Luan, tudo bem ?

Não é necessário, cuidar tanto assim. É bom a gente sempre se preparar para situações desse tipo, contudo ficar fazendo try catch em todo código não é tão bacana para quem vai dar manutenção no sistema.

Como você passou um valor que já foi validado no construtor, nos seus setters você simplesmente pode ignorar caso seja inválido, fazendo um simples if.

Espero ter ajudado

Opa Matheus, beleza? Ainda estou um pouco confuso, onde eu deveria colocar os try catch então? Se eu não usa-los a aplicação simplementes para de executar quando a exceção for executada certo? E no caso de eu precisar de um set simplesmente para alterar o valor de um propriedade, caso seja passado um valor inválido eu lançaria uma IllegalArgumentException e continuaria usando o try catch para a aplicação não morrer, não entendi muito bem como eu utilizaria o if que você falou, seria um método que retorna um boolean?

solução!

Utilize quando realmente for necessário, ou seja quando o código te força.

Um exemplo para seu set :

public void setValor(String valor){
    if(valor == null){
        new IllegalArgumentException("Valor inválido");
    }
    this.valor = valor;
}