Passar um ENUM como parametro,como eu faco?

7 respostas
K

Ola
preciso passar uma Enum como parametro, porem, qdo vou utilizar a funcao, ele me da erro

public Map getListaDeEnum(Class<?> classe) { 
		Map<String, String> est = new HashMap<String, String>();
		//ENQUANTO EXISTIR VALOR NO ENUM, ELE LISTA
		for (ContatoTipo type : ContatoTipo.values()) {
			//TODO ENUM TERMINA EM "FIM", ENTAO QUANDO ENCONTRAR "FIM", ELE SAI DO LOOP
			if (type == ContatoTipo.FIM){break;};
			est.put(type.getDescr(), type.getId()); 
		} 
		return est; 
	}
	
	public Map getContatoTipoXTest() { 
		return getListaDeEnum(ContatoTipo.class); 
	}

da forma que esta ai, funciona
porem, se eu fazer dessa forma, nao funciona

public Map getListaDeEnum(Class<?> classe) { 
		Map<String, String> est = new HashMap<String, String>();
		//ENQUANTO EXISTIR VALOR NO ENUM, ELE LISTA
		for (classe type : classe.values()) {
			//TODO ENUM TERMINA EM "FIM", ENTAO QUANDO ENCONTRAR "FIM", ELE SAI DO LOOP
			if (type == classe.FIM){break;};
			est.put(type.getDescr(), type.getId()); 
		} 
		return est; 
	}
	
	public Map getContatoTipoXTest() { 
		return getListaDeEnum(ContatoTipo.class); 
	}

oq posso fazer para que funciona?
a intencao é separar o metodo “getListaDeEnum” em uma outra classe, fazendo com que seja chamado nas classes que precisam dele

qualquer coisa se puder trocar a logica
todos meus ENUM tem a seguinte caracteristicas comecam com INICIO e terminam com FIM, possues os metodos getID, getDescr, como no exemplo

package br.com.krusst.precadastro.beans;

import java.io.Serializable;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;

import javax.faces.model.SelectItem;

public enum ContatoTipo implements Serializable{

    INICIO("0",""),

    RESIDENCIA("1","Residencial"),

    TRABALHO("2","Trabalho"),

    FIM("3",""),
    
    private String id;
    private String descr;    

	ContatoTipo() {  
    }  
	
	ContatoTipo(String id, String descr) {  
    	this.id = id;  
    	this.descr = descr;
    }  
    public String id() {  
    	return this.id;  
    }     
	
    public String descr() {  
    	return this.descr;  
    }  	
    
    public String getId() {
		return id;
	}

	public String getDescr() {
		return descr;
	}
    
	public void setID(String id) {
		this.id = id;
	}

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

quem puder me ajudar

abs

7 Respostas

R

Fala Krusst, cara uma das regras das ENUM é você ter uma classe somente pra ela assim você pode trocar mensagens por Objetos de métodos declarados nela.É exatamente como você quer fazer separando.

K

Blz cara
nao entendi…
da forma como quero usar, tem erro de compilação!

abs

R

Pelo que eu entendi deveria ficar dessa forma em uma classe separada.

public enum TipoMensageiro {

AIM( “AOL Instant Messenger” ),

ICQ( “Icq” ),

GTALK( “Google Talk” ),

MSN ( “Msn Messenger” ),

SKYPE( “Skype” ),

YAHOO( “Yahoo Messenger” );

private String descricao = null;

//passa seu parametros por contrutores

TipoMensageiro( String descricao ){

this.descricao = descricao;

}

public String getDescricao() {

return descricao;

}

}

Da forma como você declarou suas enums, cada uma delas é uma subclasse anônima da classe da enum e por isso se perde e resolve qualificar o nome da classe.

K

ruilima:
Pelo que eu entendi deveria ficar dessa forma em uma classe separada.

public enum TipoMensageiro {

AIM( “AOL Instant Messenger” ),

ICQ( “Icq” ),

GTALK( “Google Talk” ),

MSN ( “Msn Messenger” ),

SKYPE( “Skype” ),

YAHOO( “Yahoo Messenger” );

private String descricao = null;

//passa seu parametros por contrutores

TipoMensageiro( String descricao ){

this.descricao = descricao;

}

public String getDescricao() {

return descricao;

}

}

Da forma como você declarou suas enums, cada uma delas é uma subclasse anônima da classe da enum e por isso se perde e resolve qualificar o nome da classe.

entendi
mas ai tenho um problema
e os IDs, eu perco, ou perco o nome “completo” pois os ENUMS nao aceitam espaço entre as palavras(pelo que eu sei, ja fiz testes e nao consegui)

obrigado
abs

P

Ja pensou em colocar underline?

Ou um atributo “nome_completo_com_espacos_em_branco” ?

K

peczenyj:
Ja pensou em colocar underline?

Ou um atributo “nome_completo_com_espacos_em_branco” ?

sim, porem, ai vou ter que fazer POG, pra qdo mostrar na tela fazer a substituição do _ por " "
e ainda existem casos que vou ter poblemas por comecar com numeros
por exemplo

primeiro grau completo
1º Grau Completo
por isso que fiz a divisao em 2, sendo ID, e Descrição

abs

V

Tenta algo assim:

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

class MapaBlaBla {
    static final Map&lt;String, BlaBla&gt; mapa = new HashMap&lt;String, BlaBla&gt;();
}

public enum BlaBla {
    ELEM_1("foo"),
    ELEM_2("coisa"),
    ELEM_3("outra coisa");

    private final String valor;

    BlaBla(String valor) {
        this.valor = valor;
        MapaBlaBla.mapa.put(valor, this);
    }

    public String getValor() {
        return valor;
    }

    public static Map&lt;String, BlaBla&gt; getListaDeEnum() { 
        return Collections.unmodifiableMap(MapaBlaBla.mapa);
    }
}
Criado 26 de fevereiro de 2008
Ultima resposta 27 de fev. de 2008
Respostas 7
Participantes 4