Validar os valores do atributo antes de criar objeto
9 respostas
JoiceFogaca
Boa noite,
Gente como eu faço para validar os valores do atributo antes de criar o objeto.
Exemplo: Eu tenho uma classe criança, para eu instanciar uma criança eu quero receber a idade e certificar que e menor de 12 anos.
Se eu criar um construtor para que receba idade, e lá mesma que eu faço a validação, e consigo caso a idade for maior de 12 anos o objeto não ser criado?
Ou a outro meio de validar antes de criar o objeto?
Eu tô perdida nisso, se pudesse me mostrar um exemplo em código como e onde de como fazer isso.
Você quer impedir a instância de ser criada? Tem certeza que essa é a melhor forma?
Bom, você poderia utilizar um Builder que facilita muito isso, algo assim:
publicclassCriancaBuilder{publicstaticCriancacriarCrianca(intidade){if(idade>=12){thrownewIllegalArgumentException("Uma criança tem que ter menos de 12 anos");}returnnewCrianca(idade);}}
wagnerfrancisco
Pode fazer a validação direto no construtor.
publicCrianca(intidade){
if(idade>=12){
thrownewIllegalArgumentException("Uma criança não pode ter idade >= 12");}
this.idade=idade;
}
JoiceFogaca
Rodrigo Sasaki:
Você quer impedir a instância de ser criada? Tem certeza que essa é a melhor forma?
Bom, você poderia utilizar um Builder que facilita muito isso, algo assim:
publicclassCriancaBuilder{publicstaticCriancacriarCrianca(intidade){if(idade>=12){thrownewIllegalArgumentException("Uma criança tem que ter menos de 12 anos");}returnnewCrianca(idade);}}
Oi!
Obrigado a todos que responderam.
Então Rodrigo sou iniciante não sei se a melhor forma to estudando a apostila da Caelum.
Lá tem um exercicio que você tem classe pessoa e só pode um objeto pessoa se o cpf for valido.
Então eu entendi assim se pessoa entrar sem cpf ou com cpf invalido não cria o objeto.
Então eu tentei fazer assim como seu exemplo o NETBEANS não esta reconhecendo o comando "IllegalArgumentException"
Fiz um import pra classe (import java.io.*;), e msm assim nada.
ribclauport
Você tem certeza que digitou corretamente?
Essa classe faz parte do pacote java.lang, e não precisa ser importada…
Quando você diz “não reconhece”, qual a mensagem que você recebe quando coloca o cursor em cima do erro?
T
Tiago_Bevilaqua
Bom JoiceFogaça no problema do CPF, como provavelmente você não tem um banco de dados com todos os CPFs existentes, tu poderia fazer uma verificação simples (Sem caracteres especiais).
if(cpf.length()!=11)//cpfinválido.
Segue uma dica bacana, você poderia fazer um boolean para verificar se existe algo errado.
privatestaticbooleanverificaCPF=false;privatestaticbooleanverificaIdade=false;//por default o boolean é true, então vamos inicializa-lo com false.//Fazendo suas verificações...if(cpf.length()!=11)verificaCPF=true;if(idade>12){verificaIdade=true;//Caso em algum momento os ifs acima sejam acionados, depois tu imprime para saber onde foi o erro:if(verificaCPF)System.out.println("CPF inválido")if(verificaIdade)System.out.println("Idade inválida")}
Claro que esse exemplo não é o aconselhável, seria outra opção tu criar uma List<String> e ir adicionando uma mensagem para cada campo que não foi autorizado, para depois trata-los de uma forma muito mais ágil. Mas como você está começando, acho legal esse exemplo para ir pegando as manhas.
JoiceFogaca
publicCrianca(intidade){
if(idade<=12){
thrownewIllegalArgumentException("Uma criança não pode ter idade <= 12");}
this.idade=idade;
}
Não reconhecer o comando “IllegalArgumentException” foi erro de digitação, sorry :oops:
Consegui com esse modelo do Wagner no Construtor msm.
Seguindo o exemplo , eu tento criar uma criança com 13 anos , ele para a aplicação, e assim mesmo?
ruben_m
JoiceFogaça:
publicCrianca(intidade){
if(idade<=12){
thrownewIllegalArgumentException("Uma criança não pode ter idade <= 12");}
this.idade=idade;
}
Não reconhecer o comando “IllegalArgumentException” foi erro de digitação, sorry :oops:
Consegui com esse modelo do Wagner no Construtor msm.
Seguindo o exemplo , eu tento criar uma criança com 13 anos , ele para a aplicação, e assim mesmo?
Se não houver mais código depois disso ele para sim, caso haja ele irá passar a executar o restante código
Por seres iniciante te recomendo a usar a solução do felipes01 ou a do kleberdamasco
Não podemos saltar fases na aprendizagem, se usas aquela forma estaras a usar conhecimento sobre Exceptions sem saber… Logo terás uma parte do codigo que não estaras a entender porque funciona mas Funciona