O NullPointerException é um erro comum num programa escrito em Java
quando se opera uma variável do tipo objeto sem antes verificar se está
nula.
Algumas estratégias sugerem usar um padrão de
produção do objeto que ao invéz de retornar um valor nulo é retornado
um objeto que simboliza não ter encontrado o objeto esperado. Exemplo:
new ContatoNaoEncontrado("Not found").
Essa sugestão é
ruim porque requer a criação de uma classe adicional para simbolizar o
caso de não encontrado e ainda torna frustrante a codificação porque o
fluxo esperado do programador pode ser enganado caso ele se descuide e
deixe de verificar se o objeto retornado representa "not found" (não
encontrado).
Acredito que não exista uma fórmula mágica
para evitar todas as verificações de nulidade, mas nem por isso devemos
deixar de acreditar numa solução que simplifica bastante esta tarefa em
casos corriqueiros onde se trabalha com valores mais simples como é o caso das
operações de números ou textos em termos de atributo ou variável simples para apoiar a execução de um método.
A função sugerida aqui é para simplificar operações de
atributos e até mesmo realizar ETL de forma ágil e limpa, pois isso não é
errado e reduz o volume de códigos na situação explicada. Aplicar
um padrão de projeto nesses casos não convém e seria impraticável algum
padrão de projeto.
Como a maior parte dos
programas trata valores numericos e alfanuméricos em grande volume,
elaborei esta técnica na tentativa de contribuir com a boa prática de
programação. Ela consiste na criação de um método chamado ANPE (Avoid
NullPoiterException ou Evitar NullPointerException) que recebe dois
valores. Se o primeiro valor for nulo, então retorna o segundo valor.
Vamos à prática.
AvoidNullPointerException
A
classe AvoidNullPointerException conterá o método ANPE do qual falei.
Ele é estático e utiliza Java Generic para tornar a função flexível
ao tratar todos os objetos. Coloque a classe dentro de uma package
br.com.wt.util para facilitar o exercício.
package br.com.wt.util;
public class AvoidNullPointerException {
public static <V> V ANPE(V object, V object2) {
if (object == null) {
return object2;
}
return object;
}
}
Testando
O
teste é simples, pois se value for nulo, então o tornaremos 0L (zero). A
importação da função estática ANPE diminui o trabalho para invocá-la:
import static br.com.wt.util.AvoidNullPointerException.ANPE;
public class Test {
public static void main(String[] args) {
Long value = null;
if (ANPE(value, 0L) == 1L) {
value = 100L;
}
}
}
Este
teste pode ser realizado com String, Integer, Short, Double, Float e
outros tipos de objetos desde que se esteja testando um valor.
Mais um teste para fixar
Agora com uma String.
import static br.com.wt.util.AvoidNullPointerException.ANPE;
public class Test {
public static void main(String[] args) {
String country = null;
if (ANPE(country, "").equals("Brazil")) {
System.out.println("World Cup 2014");
} else {
System.out.println("But will 2016 Olympics in Brazil");
}
}
}
Boa programação.
Nenhum comentário:
Postar um comentário