Lança minha excesao no lugar de NullPointerException para objetos nulos

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 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?

@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.