Enum

15 respostas
anderson.bonavides
class A {
	enum Pferde {
		PONY(10), ESEL(15) {
			public int get() {
				return 15;
			}
		}, 
		MULI(20);

		Pferde(int i) { }
	};

	public static void main(String[] args) {
		System.out.println(Pferde.ESEL.get()); //erro!
	}
}

Alguêm poderia me dar uma força com essa questão? Encontrei ela no CAELUM

15 Respostas

Andre_Brito

Erro?
Não mostraria 15?

anderson.bonavides

dedejava:
Erro?
Não mostraria 15?

Não.

Da erro mesmo.

gugaa_df

Pow nao sei nao…
Boa pergunta.

ViniGodoy

O método get deve existir para todas as enumerações, não só para um dos elementos. Entenda o enum como se tivesse sido declarado assim:

public class Pferde {
   public static final Pferde PONY = new Pferde(10);
   public static final Pferde ESEL = new Pferde(15) {
      public int get() {  
         return 15;  
      }
   }
   public static final Pferde MULI = new Pferde(20);
}

Note que todos se "nivelam" pela interface de Pferde. Para corrigir o seu código, faça o seguinte:

class A {
   enum Pferde {
      PONY(10), ESEL(15), MULI(20);

      private int value;
      Pferde(int i) { value = i; }

      //Get é declarado para qualquer enum
      public int get() {return value;} 
   };

   public static void main(String[] args) {
      System.out.println(Pferde.ESEL.get());
   }
}
Ou ainda assim:
class A {
   enum Pferde {
      PONY {public int get() { return 10; }}, 
      ESEL {public int get() { return 15; }}, 
      MULI {public int get() { return 20; }};

      //Get ainda é declarado para qualquer enum
      public abstract int get();
   };

   public static void main(String[] args) {
      System.out.println(Pferde.ESEL.get()); //erro!
   }
}

PS: Não compilei nenhum, pode ter algum erro bobo, como esquecer os parênteses ou chaves.

Para mais informações, leia o capítulo 5 do Effective Java, substitute for C constructs, no link:
http://developer.java.sun.com/developer/Books/effectivejava/Chapter5.pdf

Ele explica como o enum é implementado por baixo dos panos. Também veja uma aplicação interessante do enum aqui:
http://www.guj.com.br/posts/list/55885.java

LPJava

me explica pq tu colocou o metodo dentro de 1 constante apenas?

PONY(10), ESEL(15) {   
            public int get() {   
                return 15;   
            }

nao seria assim:

class A {   
    enum Pferde {   
        PONY(10), ESEL(15),MULI(20);       
            public int get() {   
                return 15;   
            }   
           
        Pferde(int i) { }   
    };   
}

flw!!

anderson.bonavides

Lp Sinceramente eu não sei. São coisas da CAELUM.

LPJava

se tiver fazendo um curso la, pergunte sempre o por que… sempre…

anderson.bonavides

Não to não to so fazendo o simulado deles!
=]

LPJava

a cara o simulado deles nao é muito confiavel nao… ja peguei varias questoes com erros grosseiros ali… tipo: Um exemplo la o codigo nem compilava, e nao tinha nem essa opcao, tinha que o codigo compilava e executava… eu ainda fiz questao de copiar o codigo e executar uhaha… depois desse dia nunca mais usei… preferir fazer o do killer em pdf. :smiley:

anderson.bonavides

Entendo mas me limito a ele e a outros simulados em português pq meu Inglês é muito fraco. Só vi inglês na faculdade.

neohacker

Cara não tenho certeza mas o simulado são as pessoas que inserem questões lá … um tipo de ajuda de nós mesmos para os estudos … se está errado não é culpa deles … acho que é assim que funciona …

anderson.bonavides

A galera pega alguma experiência que teve com a prova e manda pra eles. Eu acho bastante válido sim. Tipo eu como usei ele para dar uma reforçada nos estudos vou doar as questões que lembrar também. E isso acaba se tornando bom pq é de usuário para usuário.
A primeira vez q vi a alguns meses axei muito fraco, mas agora dessa vez q eu fiz achei muito mais diferente já.

LPJava

neohacker:
Cara não tenho certeza mas o simulado são as pessoas que inserem questões lá … um tipo de ajuda de nós mesmos para os estudos … se está errado não é culpa deles … acho que é assim que funciona …

é isso mesmo que acontece… foi por isso que falei… ja que nao tem filtro nas questoes que sao enviadas entao… dar nisso. Mas gostei da ideia deles… ajuda bastante quem está bem no inicio dos estudos mesmo… e outra se o cara começar a identificar questoes enviadas erradas no simulado significa q ele está evlouindo e isso é otimo.

E a respeito dos demais simulados em ingles, isso nao é problema nao cara… os simulados nao exige ingles fluente nao… é muito simples as perguntas… simples mesmo e nao afeta nada… e outra para ler algo ingles vc sempre tem q analisar o contexto… entao vc olha o contexto da resposta + a pergunta e dai vc ver oque se pede… o que tiver duvida um tradutor ajuda bastante… no inicio eu usava um tradutor depois nem usava mais pq acabei aprendendo… as perguntas sao bem parecidas e se repetem sempre… va fazendo com tradutor que em breve vc quebra essa ideia… nao dar para fazer a scjp… sem fazer simulados em ingles que sao os unicos disponiveis com qualidade… alias tem pessoas que fizeram o exame sem fazer simulado porem isso vai o nivel de conhecimento com a tecnologia java e OO.
´
bom essa é uma opniao minha… :smiley: nada cientifico eheeh

M

Pois é pessoal, isso aí dá erro mesmo, e a sintaxe está correta.

Oque acontece, é q essa “declaração estranha”, chamada de “constant enum body” de enums, só pode existir, se estiver fazendo algum override (sobrescrevendo) algum método comun a todos os enums.

ex.:

enum HelloEnum
{

    OLA, OI,COMO_VAI
                {
                    public String saudacao()
                    {
                        return "Opa";
                    }
                };

    public String saudacao()
    {
        return this.name();
    }    
}

Atente q enums podem ter métodos, contrutores, métodos estáticos (inclusive o psvm).

everson_z

LPJava:
me explica pq tu colocou o metodo dentro de 1 constante apenas?

nao seria assim:

class A {   
    enum Pferde {   
        PONY(10), ESEL(15),MULI(20);       
            public int get() {   
                return 15;   
            }   
           
        Pferde(int i) { }   
    };   
}

Camilo,

Seu método força a retornar sempre o valor de ESEL, o do ViniGodoy envia o valor ESEL ou qualquer outro para o construtor e o construtor enviar para int value.

Criado 24 de dezembro de 2007
Ultima resposta 26 de dez. de 2007
Respostas 15
Participantes 8