Enums[RESOLVIDO]

11 respostas
A

eae Amigos, pra Nf-e eu criei certos tipos enums, entao gostaria de saber como faço para pegar o valor inteiro do enum e não a String segue o código abaixo:
sei que tem um tal de ordinal mas tenho alguns enum que começam por 0 outros por 1, mas quero a maneira mais elegante, senão vou criar constantes, abraços.

para configurar o valor faço da seguinte forma:

identificacao.setFormaPagamento(FormaPagamento.A_VISTA);

porem quando gravo no xml fica A_VISTA

Gostaria que ficasse assim: 0

package nfe.entity.enums;

public enum FormaPagamento {

	/**
	 * 0 ? pagamento à vista;
	 */
	A_VISTA(0),

	/**
	 * 1 ? pagamento à prazo;
	 */
    A_PRAZO(1),
    
    /**
     * 2 ? outros
     */
    OUTROS(2);

    final private int key;

    private FormaPagamento(int key) {
        this.key = key;
    }

    @Override
    public String toString() {
        return String.valueOf(key);
    }

}

11 Respostas

L

Ola, o que vc poderia fazer é criar um metodo get para o atributo, ex:

package nfe.entity.enums;  

public enum FormaPagamento {  
 
  /** 
    * 0 ? pagamento à vista; 
     */  
    A_VISTA(0),  
   
     /** 
       * 1 ? pagamento à prazo; 
     */  
      A_PRAZO(1),  
      
     /** 
      * 2 ? outros 
      */  
    OUTROS(2);  
   
    final private int key;  
  
private FormaPagamento(int key) {  
        this.key = key;  
     }  
   
   @Override  
     public String toString() {  
         return String.valueOf(key);  
     }  

   public int getKey(){
        return key;
    }
   
 }
M

no XML voce poderia gravar o valor ordinal() da enum.

System.out.println(A_VISTA.ordinal());
F

todo tipo enum tem o seu valor ordinal, que é acessado pelo método ordinal(). Este método é usado por exemplo quando você coloca o enum em cláusulas case de um switch. O detalhe é que se você alterar a sequência na qual os itens do enum são declarados, o valor ordinal deles vai mudar. Ou seja, se você inserir um item na primeira posição de um Enum já existentem todos os outros itens terão seu valor ordinal alterado.

A

isso eu ja tinha feito manu, mas me retorna A_VISTA, obrigado. respondendo ao leandrolw

A

Obrigado ao restante, vou testar aqui e posto se deu certo.

7

Sobrescreva o metodo toString(), e retorne o valor de sua enumeração.

public enum Tipo{

A(0),
B(1),
C(2);
private int type;

private Tipo(final int type){
this.type=type;
}
public String toString(){
return String.valueOf(this.type);
}

Desculpa pela desorganização é que to meio apresado, veja se lhe ajuda....

Att.
}

L

aix … Como vc está gerando seu XML (está utilizando alguma biblioteca específica ??) , pois realizei alguns com seu código postado e está printando o valor ordinal do seu Enum.

posta a maneira que é gerada seu XML que está dicordância de valores pode estar lá.

flw

A

Lord:
aix … Como vc está gerando seu XML (está utilizando alguma biblioteca específica ??) , pois realizei alguns com seu código postado e está printando o valor ordinal do seu Enum.

posta a maneira que é gerada seu XML que está dicordância de valores pode estar lá.

flw

gero o xml usando as anotações do JAXB, mas para testes insiro dados nas tags do xml via os métodos set e get tipo assim

icms00.setModalidade(Modalidade.PRECO_TABELADO);

L

Aix fiz o seguinte teste e acredito que o código abaixo irá sanar está questão.
Criei a seguinte classe para nota fiscal com dois atributos um como o Enum que vc disponibilizou e outro que irá receber o valor ordinal deste Enum.

@XmlRootElement
public class NotaFiscal implements Serializable{

	/**
	 * 
	 */
	private static final long serialVersionUID = 3010892854421808033L;
	
	private FormaPagamento formaPagamento;

	private int cdFormaPagamento;
	
	public FormaPagamento getFormaPagamento() {
		return formaPagamento;
	}

	public void setFormaPagamento(FormaPagamento formaPagamento) {
		this.formaPagamento = formaPagamento;
	}

	public int getCdFormaPagamento() {
		return cdFormaPagamento;
	}

	public void setCdFormaPagamento(int cdFormaPagamento) {
		this.cdFormaPagamento = cdFormaPagamento;
	}
}

Testei a geração do xml com o código abaixo :

NotaFiscal nfe = new NotaFiscal();
			
nfe.setFormaPagamento(FormaPagamento.A_PRAZO);
nfe.setCdFormaPagamento(FormaPagamento.A_PRAZO.ordinal());
			
JAXBContext	jaxbContext = JAXBContext.newInstance(NotaFiscal.class);
Marshaller 	marshaller 	= jaxbContext.createMarshaller();

marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, new Boolean(true));

marshaller.marshal(nfe,new File("c:\\nfe.xml"));

Gerando o seguinte XML:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<notaFiscal>
    <cdFormaPagamento>1</cdFormaPagamento>
    <formaPagamento>A_PRAZO</formaPagamento>
</notaFiscal>

Testa desta maneira e posta ae se o resultado … flw

A

Lord:
Aix fiz o seguinte teste e acredito que o código abaixo irá sanar está questão.
Criei a seguinte classe para nota fiscal com dois atributos um como o Enum que vc disponibilizou e outro que irá receber o valor ordinal deste Enum.

Testa desta maneira e posta ae se o resultado … flw

com certeza manu, obrigado deu certo.

L

Marca o tópico com “[Resolvido]”

flw

Criado 12 de julho de 2009
Ultima resposta 14 de jul. de 2009
Respostas 11
Participantes 6