Como obter o ídice de uma variável dentro de um ENUM?

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.