Duvida sobre enum

6 respostas
Y

As enumeracoes, denotadas pela palavra reservada enum uma novidade do JDK 1.5, sao tratadas como classes, ate onde sei!!!
Bom se uma enumeracao e tratada como uma classes nao sera um exagero esar uma enumeracao para definir um conjunto de constantes???

public enum Ex {c1, c2, c3, c4, c5}

6 Respostas

Rubem_Azenha

mas o enum não é pra constante, é pra definir um novo tipo de valor…

tipo, naipe de cartas…

enun Naipe{COPAS, PAUS, OURO, ESPADAS}

por exempli:

enum Carta = leCarta;

if (Carta == Naipe.COPAS)

processaCopas;
Y

Entao os tipos definidos por um enum nao sao constantes mas sim outros tipos de classes, seria isso???

T
  1. Um enum pode ser tratado como um conjunto de constantes inteiras quaisquer; (só que não é tão simples assim, veja os exemplos de enum que o Joshua Bloch publicou). É que normalmente os valores são sequenciais e começam por zero - resolve 95% parte dos casos mas não todos; mas ele dá uma abertura para atribuir outros valores que você quer usar.

  2. Ele é mais econômico que uma classe normal, em média, porque se você olhar no código gerado, ele não fica criando objetos a torto e a direito. Ele só reusa os objetos que foram criados, um para cada constante do enum. Portanto em média ele é tão eficiente quanto uma public static final int que você costuma usar até agora (Java 1.0 – 1.4).

Rubem_Azenha

seria um novo tipo primitivo, mais ou menos…

Y

Mas eu posso criar metodos e atributos p/ um enum como pode ser mais economico???

T

Eu falei “em média”, ou seja, o caso normal (feijão com arroz, ou em inglês, “bread & butter”) de você usar só constantes no seu “enum”.

enum Cores {
    VERMELHO, LARANJA, AMARELO, VERDE, AZUL, ANIL, VIOLETA
};

Se você investigar os bytecodes gerados por esta função que usa a enum acima (use o javap):

public String (Cores c) {
    switch (c) {
    case VERMELHO: return "red";
    case LARANJA: return "orange";
    case AMARELO: return "yellow";
    ...
    }
}

você vai ver que é gerado um código análogo ao que seria gerado se usássemos constantes definidas com “public final static int”.

Agora se você puser métodos, atributos e outras coisas, vai ficando pesado igual a uma classe normal. É questão de ver o que normalmente se usa (enum simples, sem frescuras) e o que é possível fazer (como o exemplo do Joshua Bloch mostra, é possível fazer umas coisas muito pouco intuitivas com enums - acho que ele viajou um pouco quando ele definiu as enums no Java.)

Criado 27 de agosto de 2004
Ultima resposta 30 de ago. de 2004
Respostas 6
Participantes 3