Enums[RESOLVIDO]

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);
    }

}

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;
    }
   
 }  

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

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

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.

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

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

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

[code]
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);
}[/code]

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

Att.
}

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

[quote=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[/quote]

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);

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

[quote=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[/quote]

com certeza manu, obrigado deu certo.

Marca o tópico com “[Resolvido]”

flw