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 vazio
if ((sala.getId().equals("")) ) {
throw new IdentificacaoInvalidaException();
}
// se o id for nulo
if ((sala.getId() == null)){
throw new IdentificacaoInvalidaException();
}
// se a capacidade fisica for menor que 0 ou igual a 0 lance a excesao
if(sala.getCapacidadeFisica() <= 0){
throw new CapacidadeInvalidaException();
}
// se o tipo da sala for nulo
if ((sala.getTipo() == null)){
throw new TipoInvalidoException();
}
// verificando se o id ja existe
for (int i = 0;i < salasAlocadas.size(); i++){
if (sala.getId().equals(salasAlocadas.get(i))){
throw new SalaExistenteException();
}
}
return true;`
Que tal verificar se sala é null antes de tudo? [quote=“BreckDor, post:1, topic:340064”]
public boolean validar(Sala sala, ArrayList salasAlocadas)
[/quote]
Pois se ela for null realmente quando vc chegar p/ verificar se sala.getId() == null vai pipocar.
é 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.
Não entendi… esta classe é uma classe p/ realizar testes?
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.
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 resolver
try{
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?
@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.
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
public class IdentificacaoInvalidaException extends Exception {
public IdentificacaoInvalidaException(){
// este é a frase de error que o easy acepty espera.
super(“Identificacao Invalida”);
}
}
mas quando fiz
if ((sala.getId() == null)){
throw new IdentificacaoInvalidaException();
}
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”
sejamos diretos,
só vou reformular o que os camaradas já falaram:
// se o id for vazio
if ((sala.getId().equals("")) ) {
throw new IdentificacaoInvalidaException();
}
// se o id for nulo
if ((sala.getId() == null)){
throw new IdentificacaoInvalidaException();
}
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.
Cara, não sei se entendi o que você quer fazer mas tente fazer algo assim:
try {
if ((sala.getId().equals("")) ) {
throw new IdentificacaoInvalidaException();
}
catch (NullPointerException e) {
throw new IdentificacaoInvalidaException(e);
}
Isso deve lhe satisfazer.
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.
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.
Coloca um teste:
if (sala == null) {
throw new SalaNaoInformadaException();
}
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.