Como acessar o nome de uma constante declarada da seguinte forma: public static final int START = 0;

Olá,

estou usando Netbeans IDE 6.1 e JDK 1.5.0-14, no Debian Etch.

No meu código faço uma declaração da seguinte maneira:

public static final int START = 0;

Significa que a constante START vai receber o valor 0.

Como eu faço para escrever na tela o nome da constane cujo valor é 0? Ou seja eu quero passar o 0 como parâmetro e receber o START, como resposta.

Não quero usar if, pois existem muitas declaraçoes deste tipo(public static final int ALGUMA_COISA = ALGUM_VALOR;), precisaria construir uma estrutura if bem grande.

Queria algo do tipo:

System.out.println(estado);

Queria que a saída disso fosse START. Sendo que:

int estado = 0;

cara é um duvida meio estranha mas sem if, ou um switch vc naum vai conseguir nada

switch(estado){

case START:
  System.out.println("START");
  break;
...

}

teria que ter algo assim.

blz Felagund,

vc não foi o primeiro a dizer que a dúvida era estranha, hehehe. Não tinha pensado no switch. Vou ficar com a sua sujestão.

Valeu

blz pessoal,

to implementando a sugestão do Felagund aqui mas me deparo com o seguinte problema: Imaginem que eu tenho 10 mil declarações de constantes, da forma:

public static final int ALGUMA_COISA = ALGUM_VALOR;

de acordo com a sujestão do Felagund eu teria que fazer um switch com 10 mil itens. E se eu alterar algumas das declarações de constantes, tenho ir lá no switch e alterar tb, tudo manual…

Eu queria algo como um switch vinculado as declarações de constantes. De tal forma que se eu mexece nas declarações de constantes eu não precisasse alterar no switch tb.

Alguem ae manja isso?

Desse jeito que está querendo só mesmo usando uma reflection, e pode ser um pouco complicado se vc já não souber algo de reflection.

http://java.sun.com/docs/books/tutorial/reflect/index.html

Mas tipo, vc precisa mesmo de algo assim? Para que exatamente é isso aí? Já pensou em vez de usar constantes usar enum?

Se você souber o nome da classe onde a constante é declarada, você pode tentar reflection. Mas o correto, se pensarmos bem, é usarmos enum, não esse tipo de definição. Com enum é possível, dado o ordinal, obter a constante.

public enum Comandos {
    START, END
}