Tenho alguns enums em um projeto (java 6), algo como:
enumRegiao{RCN,RCS,SUD,SUL;}
FazendoEnum.valueOf(Regiao.class, "RCS");, recupero a constante sem problemas.
Entretanto, estou tentando criar um método dinâmico onde passo o nome, ou mesmo a classe do Enum em tempo de execução. Fiz: Enum.valueOf(Class.forName("domain.Regiao"), "RCS");
// ou mesmo
Enum.valueOf(Class c, String valor);
e nem mesmo compila. Parece que falta algum cast, o Eclipse informa
Bound mismatch: The generic method valueOf(Class<T>, String) of type Enum<E> is not
applicable for the arguments (Class<capture#6-of ?>, String). The inferred type capture#6-of ? is
not a valid substitute for the bounded parameter <T extends Enum><T>>
enumAlunos{JOAO,PEDRO,LUCAS}enumAlunas{MARCIA,REGINA,LUISA}classTesteEnum3{publicstaticvoidmain(String[]args)throwsClassNotFoundException{// Isto funciona OK...Enumen1=Enum.valueOf(Alunos.class,"JOAO");System.out.println(en1);// imprime JOAO// e isto também funciona OK (provavelmente é o que você vai ter de usar), embora// tenha um "SuppressWarnings" meio chato:Classklass2=Class.forName("Alunos");@SuppressWarnings("unchecked")Enumen2=Enum.valueOf(klass2,"PEDRO");System.out.println(en2);// imprime PEDRO// O que vem a seguir requer, de qualquer maneira, a importação // da classe Alunos, portanto não é bem o que você quer:Class<Alunas>klass3=Alunas.class;// veja a declaraçãoAlunasal3=Enum.valueOf(klass3,"MARCIA");System.out.println(al3);// imprime MARCIA// Se em vez de Alunas.class tivéssemos Class.forName ("Alunas") // o caso é um pouco pior, já que temos de @SuppressWarnings("unchecked")Class<Alunas>klass4=(Class<Alunas>)Class.forName("Alunas");Alunasal4=Enum.valueOf(klass4,"REGINA");System.out.println(al4);// imprime REGINA// Note que o "SuppressWarnings" deve ser usado apenas quando se sabe// o que está fazendo. Vamos fazer um cast errado de propósito:@SuppressWarnings("unchecked")Class<Alunas>klass5=(Class<Alunas>)Class.forName("Alunos");// O compilador deixa passar...// A linha a seguir provoca, em tempo de execução, um // IllegalArgumentException ("No enum const class Alunos.LUISA")Alunasal5=Enum.valueOf(klass5,"LUISA");System.out.println(al5);}}
P
peczenyj
Alguem utiliza enums como se fossem (arg!) Singletons?