quarta-feira, 23 de outubro de 2013

Comparando Enumerators no Java

Olá, pessoal!

Estou aqui novamente, agora para falar dos Enumerators no Java.

Trabalhando com Enumerators, é normal precisarmos comparar um Enumerator com outro Enumerator. Existem 2 formas de fazer isto:
  • usando equals();
  • usando == ;

O uso que vejo mais comum é do equals(). Acredito que seja mais usado pelo fato do equals() ser adotado em qualquer comparação de objeto, pois o uso do == realiza a comparação de endereço na memória (que é o que raramente precisamos na aplicação).

Tão raro mas... faz todo sentido no caso dos Enumerators! Com uma vantagem: previne NullPointerException. Como isto é possível? Vamos aos exemplos.

Vamos pensar em um Enumerator chamado TipoDocumento, que contém as seguintes constantes: CPF e CNPJ:

public enum TipoDocumento {
    CPF, CNPJ;
}

Digamos que uma classe Pessoa tenha um atributo TipoDocumento:

public class Pessoa {
     private TipoDocumento tipoDocumento;
     //getters e setters
}




Dado 2 instâncias de Pessoa (vamos chamá-las de pessoa1 e pessoa2), podemos comparar seus tipos de documento com equals():

if(pessoa1.getTipoDocumento().equals(pessoa2.getTipoDocumento()) {
     //...
}

ou usando == :

if(pessoa1.getTipoDocumento() == pessoa2.getTipoDocumento()) {
     //...
}

Reforçando, as 2 soluções são corretas!

Contudo, a segunda solução tem a vantagem de não estar tão sujeita a um NullPointerException quanto na primeira, pois se o getTipoDocumento da pessoa 1 estiver nulo na primeira solução, ocorrerá um NullPointerException.

A segunda solução também funciona pois o CPF e CNPJ são constantes do TipoDocumento, portanto, terão sempre o mesmo endereço na memória da aplicação. Por esta razão, podemos utilizar o operador == para comparação. Uma última vantagem da segunda abordagem é que ela deixa o código mais legível, o que é sempre bem-vindo.

Enfim, uma dica simples, mas útil =).

Nenhum comentário :

Postar um comentário