pessoal,
Gostaria de saber como posso obter - por exemplo - o índice apontado por "sINFO" dentro de :
static public enum MensagensLog { sFATAL , sERROR , sWARNING , sINFO , sDEBUG , sDISABLED } ;
Sei que é 3.
Quando eu uso :
System.out.println(MensagensLog.values()[3]); // Saída => sINFO
Eu sonsigo o inverso, ou seja, em função do índice, obter o valor.
Mas na verdade, eu queria o inverso :
métodoxyz( sINFO ) = 3 ;
Alguem pode ajudar, pfv ?
+++
Tenta assim:
MensagensLog t=MensagensLog.sFATAL;
int indice =t.ordinal();
Você não precisa adicionar o enum em uma variável e vc pode passar ele para String também.
int indice = MensagensLog.sERROR.ordinal();
String indiceString=MensagensLog.sERROR.toString();
Valeu Otávio !
Mas como eu poderia fazer isso, passando a string como argumento ?
Do modo acima, a String sERROR pr exemplo, está inserida na instrução, textualmente.
Mas eu queria algo tipo :
INDICE = FUNCAO_INDICE( sERRO ) ;
Tem como fazer assim ?
+++
Para transformar String em enum, você pode utilizar o método estático valueOf da enum.
Evitar usar o método ordinal() para associar cada enum a um indíce.
Se a ordem da enum é alterada, seu programa pode parar de funcionar.
Dê uma olhada no livro Effective Java 2nd Edition e veja formas melhores de fazer isso.
Tenta assim:
int indica= MensagensLog.valueOf("sFATAL").ordinal();
acho que uma solução melhor seria adicionar alguns atributos ao Enum.
http://download.oracle.com/javase/tutorial/java/javaOO/enum.html
[code]public class Menssagem {
static enum MensagemEnum {
WARNING(1, “Warnig!”)
, ERROR(2, “Error!”);
private int codigo;
private String mensagem;
private MensagemEnum(int codigo, String mensagem) {
this.codigo = codigo;
this.mensagem = mensagem;
}
static MensagemEnum find(int codigo) {
for (MensagemEnum me : MensagemEnum.values()) {
if (me.codigo == codigo) {
return me;
}
}
throw new IllegalArgumentException("Mensagem de código " + codigo + " não encontrada");
}
public int getCodigo() {
return codigo;
}
public String getMensagem() {
return mensagem;
}
}
public static void main(String[] args) {
System.out.println(MensagemEnum.WARNING.getMensagem());
System.out.println(MensagemEnum.WARNING.getCodigo());
System.out.println(MensagemEnum.find(2).getMensagem());
}
}[/code]
seja criativo e adapte o exemplo.
pessoal,
Por estar apanhando um bocado, mudei a estrutura do programa e parti pra solução mais simples, convertendo o tipo enum em String[].
Agora uso apenas o método lengh e um while e fica tudo resolvido.
Obrigado pelas dicas.
+++
A Pattern de enum em string tem alguns erros, como a possibilidade de se adicionar acidentalmente 2 valores iguais ao array, fora isso não vejo grilo.