estou com esta duvida, porque usar enum ? é só pra elegância do código ou tem alguma vantagem ?
de acordo com as minhas pesquisas, eu não ´posso dar new em um enum, mas ´porque sou obrigado a declarar um construtor ? pelo menos o eclipse da erro de compilação sem a declaração do construtor
[quote=mmx]estou com esta duvida, porque usar enum ? é só pra elegância do código ou tem alguma vantagem ?
de acordo com as minhas pesquisas, eu não ´posso dar new em um enum, mas ´porque sou obrigado a declarar um construtor ? pelo menos o eclipse da erro de compilação sem a declaração do construtor
grato[/quote]
Porque internamente ele fará uso desse construtor. Sim, além de mais elegante oferece padronização, o que é bem importante.
Imagina você fazer um switch com os códigos 1, 2 e 3 em seu software e você repetir isso em vários lugares. Agora, imagina que o que antes era código 3 passa a ser código 5. Qual sua reação ?
Exato, buscar todas as classes que fazem uso desse número 3 e o substituir por 5. Consegue visualizar o retrabalho disso ?
Com ENUM, com ficaria ? Simples, você atribui simples um nome, digamos: CODIGO_COMPRA ok?
Agora esse CODIGO_COMPRA é 3 e mudou para 5, qual sua reação ? A mais simples possível, vai no ENUM altera o 3 para 5 e pronto, resolvido.
Consegui clarear ? E só para deixar claro, elegância em código também é importante, quanto mais claro ele for, melhor a todos.
Abraços.
Um Enum pode ser considerado como uma Classe que contém dois atributos: Código e Descrição
Vamos dizer que você possui um combo para selecionar o sexo do cliente. Masculino e Feminino. Vamos dizer que você também tenha uma tabela no banco tblSexo, contendo dois registros, a saber Masculino e Feminino.
Veja, sexo não é algo que fica mudando com frequência. (Sei lá, daqui a pouco inventam Masculino, Feminino, Outros. rs)
Pergunto toda vez que você quiser carregar um combo com o sexo você irá no banco de dados ou num webservice, abrir conexão, fazer um SELECT para trazer dois registros, instanciar uma lista desta classe ou um array e popula o combo? Será que pegando do Enum não seria mais rápido, mais simples e pouco processamento?
O Enum serve para elegancia também, muitas vezes fica ruim você fazer um if(Codigo == 1), é mais elegante e melhor para todos do desenvolvimento ler um código if(Codigo == TipoEndereco.APARTAMENTO), mas também serve para evitar ir no banco, instanciar objetos, abrir conexão, fazer SELECT para dados que não se modificam com frequencia.
Enums são constantes que visam garantir programaticamente os valores que serão passados para um metodo por exemplo
Digamos que você tem um metodo que recebe uma String que é o Status no seu pedido por exemplo
private void mudarStatus(String status){
//codigo muito importante que atualiza status
}
Agora digamos que você quer utilizar esse metodo porem esse é um sistema que você não tem muita intimidade ou simplesmente não lembra de todos os status que podem ter um pedido, você pode colocar um status que não existe por exemplo “Produto sem estoque”, o que pode gerar inconsistência ou simplesmente caso o metodo faça alguma validação com esse status ele não fazer nada pois o status não existe.
Ai que entra o Enum, digamos que agora o seu metodo é o seguinte
[code]private void mudarStatus(Status status){
//codigo muito importante que atualiza status
}
public Enum Status{
SEPARACAO, ENTREGUE, EMITINDO_NOTA_FISCAL, ENVIADO;
}
[/code]
Agora alem de saber quais são os status que existem, você também pode garantir que sempre sera passado o Status que exista, caso você queria adicionar um novo status basta editar o Enum Status e adicionar um novo Status.
[quote=povin]Enums são constantes que visam garantir programaticamente os valores que serão passados para um metodo por exemplo
Digamos que você tem um metodo que recebe uma String que é o Status no seu pedido por exemplo
private void mudarStatus(String status){
//codigo muito importante que atualiza status
}
Agora digamos que você quer utilizar esse metodo porem esse é um sistema que você não tem muita intimidade ou simplesmente não lembra de todos os status que podem ter um pedido, você pode colocar um status que não existe por exemplo “Produto sem estoque”, o que pode gerar inconsistência ou simplesmente caso o metodo faça alguma validação com esse status ele não fazer nada pois o status não existe.
Ai que entra o Enum, digamos que agora o seu metodo é o seguinte
[code]private void mudarStatus(Status status){
//codigo muito importante que atualiza status
}
public Enum Status{
SEPARACAO, ENTREGUE, EMITINDO_NOTA_FISCAL, ENVIADO;
}
[/code]
Agora alem de saber quais são os status que existem, você também pode garantir que sempre sera passado o Status que exista, caso você queria adicionar um novo status basta editar o Enum Status e adicionar um novo Status.[/quote]
Realmente é isso ai. E não adianta usar um valor constante como public int SEPARACAO = 0; public int ENTREGUE= 1; pois a chamada função recebe um valor inteiro então quem faz uso dela pode não usar sua constante e isso pode gerar erros dificicieis de serem encontrados. Fora o fato que ele é um objeto então pode fazer mais coisas além de simplesmente conter um valor para comparação.