Uma abordagem para evitar NullPointerException – Alberto Souza
Posted in java	Tagged java, null value objects
Evitando Null Pointer Exception em Scala →
7 thoughts on "Uma abordagem para evitar NullPointerException"
Muito boa a explicação, é algo tão simples, porém, muita gente não se atenta no desenvolvimento.
20/01/2011 at 1:30 pm
pois bem, passei recentemente por esta situação e vi que poderia seguir por 3 caminhos:
a) lançar uma XPTONotFoundException // que é feia as vezes
b) a usa abordagem
c) ainda na sua abordagem, nao vejo pq criar uma nova classe. Poderia simplesmente ter retornado um Contato com nome e email em branco. Poderia expor como
public static final Contato Null = new Contato(false);
private /* ou public */ Contato(boolean encontrado){ ...}
uma vantagem dessa abordagem é ter apenas uma classe (a mesma pode ser até final) e vc definindo o equals vc pode fazer coisas como (nada impede de vc retornar um clone desse contatoNaoEncontrado). De qualquer forma podemos cair em uma quarta forma de resolver isto:
d) Contato é uma interface. Uma das implementações pode ser um Contato "normal" e a outra pode ser um ContatoNaoEncontrado.
e) o metodo buscaPor pode retornar um objeto Result , que possui 2 metodos
boolean achou()
O uso de um Result pode ser util se vc tem muitos objetos assim.
e, por fim, poderiamos fazer
f) o metodo buscarPor poderia receber um objeto default para retornar caso não encontre nada.
Acho que uma ultima alternativa seria vc criar um proxy dinamico e retornar algo realmente inocuo, que retorne strings vazias ou coisas do genero (como um Stub). Não consigo imaginar onde vc gostaria de usar isto mas… se vc anotasse os metodos com algo do tipo @Default(valor="not set") e uma cacetada de classes pudesse fazer uso disso… talvez… mas tenho medo de fazer isso um dia.
É bom termos umas alternativas na manga. As vezes o dominio do problema pode aceitar um usuario "Nulo" (no caso de um logger) mas outras vezes pode trazer problema. Nessas horas eu sinto falta de um Nullable em java e geralmente só checo null quando vem de objetos cujas classes são de terceiros.
E NullPointerException é muito feio. Doi.
Oi Tiago, entendo seu ponto. Poderia realmente ser retornado um objeto da classe Contato mesmo, mas preferi herdar para ficar bem claro que o "objeto nulo" tem que tá com a semântica definida. A abordagem do Result é uma boa e ficaria realmente mais genérico. Vou comentar sobre essa no próximo post, no qual vou pegar o mesmo problema e resolver em Scala.
Com scala.Option fica muito mais elegante né?
Pois é, o null cria esse tipo de situacao pra gente. Uma parte mais basica desse assunto é o que o Effective Java nos diz para nunca devolvermos null quando utilizar array e collections, sempre preferir new Tipo[0] e Collections.emptySet(), por exemplo.
Fica mesmo :). A Option do Scala já é a solução pensada para esse caso.
Evitando Null Pointer Exception em Scala | Alberto Souza says:
[…] Alberto Souza Programação e qualquer a coisa que tenha a ver com isto Skip to content HomeSobre ← Uma abordagem para evitar NullPointerException […]
Java Revolution » Uma abordagem para evitar NullPointerException says:
[…] Retirado do blog: https://alots.wordpress.com/2011/01/20/uma-abordagem-para-evitar-nullpointerexception/ […]