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

3 respostas
K

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+

3 Respostas

C

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.

K

Muito boa Cássio funciona perfeitamente

E

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”?

Criado 14 de abril de 2008
Ultima resposta 21 de mar. de 2012
Respostas 3
Participantes 4