Lança minha excesao no lugar de NullPointerException para objetos nulos
11 respostasResolvido
javaexception
B
BreckDor
Preciso lançar uma excesao espercifica para parametros nulos mas sempre acaba caindo em java.lang.NullPointerException. como fazer com que seja lançada a minha excesao no lugar de java.lang.NullPointerException.
abaixo meu codigo.
`public boolean validar(Sala sala, ArrayList salasAlocadas) throws IdentificacaoInvalidaException, CapacidadeInvalidaException, TipoInvalidoException, SalaExistenteException{
// se o id for vazioif((sala.getId().equals(""))){thrownewIdentificacaoInvalidaException();}// se o id for nuloif((sala.getId()==null)){thrownewIdentificacaoInvalidaException();}// se a capacidade fisica for menor que 0 ou igual a 0 lance a excesaoif(sala.getCapacidadeFisica()<=0){thrownewCapacidadeInvalidaException();}// se o tipo da sala for nuloif((sala.getTipo()==null)){thrownewTipoInvalidoException();}// verificando se o id ja existe for(inti=0;i<salasAlocadas.size();i++){if(sala.getId().equals(salasAlocadas.get(i))){thrownewSalaExistenteException();}}returntrue;`
public boolean validar(Sala sala, ArrayList salasAlocadas)
Pois se ela for null realmente quando vc chegar p/ verificar se sala.getId() == null vai pipocar.
B
BreckDor
é porque eu tenho que mostrar qual o motivo do erro. pois isso será passado por um arquivo de testes. entao se o id for nulo eu obrigatoriamente preciso lançar uma IdentificacaoInvalidaException por ela ter no construtor getMessage = “Identificacao Invalida” Veja aqui o log de erro. se eu naol ançar uma escesao com esta mensagem ““Identificacao Invalida”” que no meu caso será IdentificacaoInvalidaException, mas acaba caindo em NullPointerException.
At line 86: Expected the error message , but the error message was <(no message: exception = java.lang.NullPointerException)>
At line 88: Expected , but no error occurred.
At line 90: Expected , but no error occurred.
At line 92: Expected , but no error occurred.
At line 94: Expected the error message , but the error message was <(no message: exception = java.lang.NullPointerException)>
At line 96: Expected the error message , but the error message was <(no message: exception = java.lang.NullPointerException)>
At line 98: Expected , but no error occurred.
At line 100: Expected <Sala não existe.>, but no error occurred.
RaulCrash
Não entendi… esta classe é uma classe p/ realizar testes?
staroski
NullPointerException significa que você tentou acessar o membro de um objeto não inicializado.
Significa basicamente que seu código não foi implementado da forma correta.
B
BreckDor
isso é um problema pois no teste ele receberá os parametos exatamente desta forma
expectError “Identificacao Invalida” adicionarSala id= capacidade=30 finalidade=“Sala de Aula” tipo="Normal"
Onde id nao sera informado(por então nao pode ser inicializado) por isso eu havia feito if ((sala.getId() == null)){ throw new IdentificacaoInvalidaException(); }' entao como estava sendo lançado o NullPointerException. eu imaginei que algo mais ou menos assim poderia resolvertry{
if ((sala.getId() == null)){
throw new IdentificacaoInvalidaException();
}
} catch(NullPointerException e){
// usando algum polimofismo
NullPointerException Idie = new IdentificacaoInvalidaException
e = idie;
System.out.println(e.getMessage());
}`
então eu queria algo mais ou menos assim. caso desse NullPointerException ele lancasse IdentificacaoInvalidaException?
RaulCrash
@BreckDor vamos organizar sua dúvida, fala qual é seu propósito e quais tecnologias esta usando. Já percebi que isto é uma classe de teste unitário. É com JUnit mesmo? Já posta a versão. Assim o pessoal poderá entender melhor e sugerir soluções. Abrçs.
B
BreckDor
não uso JUniti. estou usando apenas o easyAccepty( Testes de aceitação ). no caso o easyAcepty espera que em um error onde o id da sala nao é informado eu lhe mostre a mensagem “Identificacao Invalida”. por isso criei a Excesao
ele lança NullPointerException em vez da excesao que defini na clausula throw new.
entao eu preciso de uma forma que se id de sala for nulo ele lance IdentificacaoInvalidaException e nao NullPointerException pois nãoé este o error que o easyAccepty espera.
aqui a parte do script do easyAcepty que estou tentando resolver:
Entradas invalidas
expectError “Identificacao Invalida” adicionarSala id= capacidade=30 finalidade=“Sala de Aula” tipo=“Normal”
expectError “Identificacao Invalida” adicionarSala id="" capacidade=30 finalidade=“Sala de Aula” tipo=“Normal”
G
Getulio_Miranda2
sejamos diretos,
só vou reformular o que os camaradas já falaram:
// se o id for vazioif((sala.getId().equals(""))){thrownewIdentificacaoInvalidaException();}// se o id for nuloif((sala.getId()==null)){thrownewIdentificacaoInvalidaException();}
qual o propósito de verificar == null se você já acessou a instancia? inverta a sequência, se o id for nulo e você tentar chamar um .equals você terá uma NullPointerException.
Solucao aceita
igorventurelli
Cara, não sei se entendi o que você quer fazer mas tente fazer algo assim:
Mas o que o pessoal comentou anteriormente é verdade.
Você pode receber uma NullPointerException em duas situações:
1.sala.getId() - Se o objeto sala for null, ao tentar acessar o método getId() você receberá uma NullPointerException.
2.getId().equals("") - Se o objeto sala não for null mas o ID de sala sim, ao tentar acessar o método equals("") você receberá uma NullPointerException.
Além disso, eu particularmente, não acho uma boa ideia “mascarar” um NullPointerException com uma exceção específica. A NullPointerException normalmente é algo simples de ser identificado e resolvido. Talvez, “mascarando” ela dentro de uma exceção específica, dificulte a sua vida quando der problema.
Espero ter ajudado.
Abs.
staroski
Se é realmente nesse código que está lançando NullPointerException, é porque você não inicializou a variável sala e, neste caso, não faz sentido tratar NullPointerException.
Realmente igorventurelli era esse o codigo que eu procurava quando criei esse topico. tambem concordo que nao era uma boa ideia mas graças a vcs percibi que minhs solução era so tratar o parameto antes da criação do objeto sala. valeu a todos vcs foram de grande ajuda.