Enum - Obter o valor do atributo do enum atraves do metodos

Ola pessoal
eu tenho o seguinte enum

public enum Sexo {

    INICIO(0,""),
    MASCULINO(1,"M"),
    FEMININO(2,"F"),
    FIM(3,"");

    private int 	id;
    private String 	descr;
    
	private Sexo() {
	}

	private Sexo(int id, String descr) {
		this.id = id;
		this.descr = descr;
	}

	public int getId() {
		return id;
	}

	public String getDescr() {
		return descr;
	}

	public void setId(int id) {
		this.id = id;
	}

	public void setDescr(String descr) {
		this.descr = descr;
	}

}

atraves dos metodos dele, eu consigo saber o Descricao e a ID,porem, como eu faco para obter o valor do atributo?(nao sei se essa é a definicao certa nessa caso)

por exemplo
me passam o valor “M” como eu faco para obter o valor “MASCULINO” e saber o valor do ID?

abs
T+

Algo como

enum Sexo.java

import java.util.Map;
import java.util.HashMap;

public enum Sexo {

    INICIO(0,""),
    MASCULINO(1,"M"),
    FEMININO(2,"F"),
    FIM(3,"");

    private int 	id;
    private String 	descr;
    
    /**
     * Guarda as relacoes entre a descricao e o valor
     * de um elemento da enum
     */
    private static Map<String, Sexo> relations;
    
	  private Sexo() {
	  }

	  private Sexo(int id, String descr) {
		  this.id = id;
		  this.descr = descr;
	  }

	  public int getId() {
		  return id;
	  }

	  public String getDescr() {
		  return descr;
	  }

	  public void setId(int id) {
		  this.id = id;
	  }

	  public void setDescr(String descr) {
		  this.descr = descr;
	  }
	  
	  /**
	   * Recupera um elemento da enum a partir de uma string
	   * @param descr A string de descricao do elemento
	   * @return Um elemento da enum ou null caso nenhum elemento
	   * seja encontrado para a descricao pesquisada.
	   */
	  public static Sexo getSexoPorDescr(String descr) {
	    return relations.get(descr);
	  }
	  
	  /**
	   * Bloco estatico que popula o hashmap com as relacoes entre
	   * descricao e elementos da enum
	   */
	  static {
	    relations = new HashMap<String, Sexo>();
	    for(Sexo s : values()) relations.put(s.getDescr(), s);	  
	  }

}

Usando esse negócio ai de cima

public class Main {
	public static void main(String[] args) {
		String[] descr = {"", "M", "F"};
		for(String s : descr)
			System.out.println(s + " => " + Sexo.getSexoPorDescr(s));
	}
}

O problema é que vc definiu uma string vazia para representar tanto o elemento FIM como o elemento INICIO. Assim, somente o último dos dois a ser lido no bloco estático será relacionado na hashmap. Altere a string de descrição de um dos dois para seja possível recuperar qualquer um dos quatro elementos da sua enum.

Muito boa Cássio funciona perfeitamente

Você copiou isso literalmente de um programa em C?

Em enums em C normalmente você precisa definir uma constante para fim (para poder dimensionar arrays contendo um caso para cada constante da enum), mas em Java isso é besteira.

Ou seu sexo é “INICIO”?