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.

Desde já agredeço.

;*

9 Respostas

K
Crianca crianca;
if(idade<12) {
crianca = new crianca(idade);
}
F

por mais que não seja a solução mais bonita voce não poderia faze assim

if(idade < 12){
    new Crianca();
else(){
  // alguma coisa
}
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:
public class CriancaBuilder{

    public static Crianca criarCrianca(int idade){
        if(idade >= 12){
            throw new IllegalArgumentException("Uma criança tem que ter menos de 12 anos");
        }
        return new Crianca(idade);
    }

}
wagnerfrancisco

Pode fazer a validação direto no construtor.

public Crianca(int idade) {
    if (idade >= 12) {
        throw new IllegalArgumentException("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:
public class CriancaBuilder{

    public static Crianca criarCrianca(int idade){
        if(idade >= 12){
            throw new IllegalArgumentException("Uma criança tem que ter menos de 12 anos");
        }
        return new Crianca(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

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)
    //cpf inválido.

Segue uma dica bacana, você poderia fazer um boolean para verificar se existe algo errado.

private static boolean verificaCPF = false;
private static boolean verificaIdade = 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 &gt; 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
public Crianca(int idade) {
    if (idade <= 12) {
        throw new IllegalArgumentException("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:

public Crianca(int idade) {
    if (idade <= 12) {
        throw new IllegalArgumentException("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

Abraços

Criado 3 de janeiro de 2013
Ultima resposta 4 de jan. de 2013
Respostas 9
Participantes 8