Enums são objetos com estado e comportamentos

Eu não sei você, mas por muito tempo eu subestimei e encarei as enums no meu código apenas como simples constantes…

public enum TipoDeDocumento {

    RG,
    CPF,
    CNPJ;
}

Isto foi um grande erro, pois enums são tão poderosas quanto objetos Java… na verdade, enums são objetos e você deveria encará-las dessa forma! Tratá-las apenas como substitutos para uma lista de constantes do tipo int ou String é ignorar todo o potencial das enums e da orientação a objetos no seu código!

Uma enum pode ser tão completa quanto um objeto Java qualquer, isto é, uma enum pode ter dados (estado) e comportamentos. O código a seguir com uma enum possuindo estas características pode te dar uma idéia sobre o que estou falando:

public enum TipoDeDocumento {

    RG("RG", new ValidadorDeRg()),
    CPF("CPF", new ValidadorDeCpf()),
    CNPJ("CNPJ", new ValidadorDeCnpj());

    private String descricao;
    private Validador validador;

    private TipoDeDocumento(String descricao, Validador validador) {
        this.descricao = descricao;
        this.validador = validador;
    }

    /**
     * Valida número do documento
     */
    public boolean valida(String numero) {
        return this.validador.isValido(numero)
    }
}

Talvez só olhando o código não seja fácil compreender o poder das enums, então para você entender o que eu estou falando realmente eu te convoco a dar uma olhada nesse novo post no blog da Triadworks:

>> Enums são mais que constantes

O post também aborda algumas práticas sobre orientação a objetos que deixamos de usar por não compreender que enums são objetos com dados e comportamentos.

E aí, o que achou do post?

Leave a Reply

Your email address will not be published. Required fields are marked *