Como evitar NullPointerException em java?

Quem aqui já programou em java, certamente já viu o erro: java.lang.NullPointerException. Pois bem, vamos para um exemplo:

public class Pessoa {

    private Long id;
    private String nome;
    private Endereco endereco;

    public Endereco getEndereco() {
        return endereco;
    }

    public Long getId() {
        return id;
    }

    public String getNome() {
        return nome;
    }

    public void setEndereco(Endereco endereco) {
        this.endereco = endereco;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

}
public class Endereco {

    private Long id;
    private String rua;
    private String numero;
    private String bairro;
    private String cidade;

    public String getBairro() {
        return bairro;
    }

    public String getCidade() {
        return cidade;
    }

    public Long getId() {
        return id;
    }

    public String getNumero() {
        return numero;
    }

    public String getRua() {
        return rua;
    }

    public void setBairro(String bairro) {
        this.bairro = bairro;
    }

    public void setCidade(String cidade) {
        this.cidade = cidade;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public void setNumero(String numero) {
        this.numero = numero;
    }

    public void setRua(String rua) {
        this.rua = rua;
    }

}
public class Teste {

    public static void main(String[] args) {
        Pessoa aluno = new Pessoa();
        System.out.println("Rua: " + aluno.getEndereco().getRua());
    }
}

Executando este código, temos o seguinte retorno no console:

Exception in thread "main" java.lang.NullPointerException
    at br.com.karanalpe.main.Teste.main(Teste.java:9)

Como evitar?
No trabalho brincamos que o sistema é orientado a NullPointerExcepetion. Então, foi sugerido realizar uma alteração em todas as entidades para resolver de vez esse problema. Esta, consiste em declarar 2 construtores para cada entidade da seguinte forma:

    public Pessoa() {
        this(-1L, "", new Endereco());
    }

    public Pessoa(Long id, String nome, Endereco endereco) {
        super();
        this.id = id;
        this.nome = nome;
        this.endereco = endereco;
    }
   public Endereco() {
        this(-1L, "", "", "", "");
    }

    public Endereco(Long id, String rua, String numero, String bairro, String cidade) {
        super();
        this.id = id;
        this.rua = rua;
        this.numero = numero;
        this.bairro = bairro;
        this.cidade = cidade;
    }

Fazendo essa alteração, conseguimos rodar sem problemas o nosso main. Vejamos o console:

Rua: 

Nota: Partimos do pressuposto que ao dar um New em determinado objeto, o mesmo deve existir, mesmo apresentando informações em branco. Fazendo essa simples alteração , conseguimos garantir isso!

Fim 🙂

Deixe uma resposta