2011-11-03 22 views
43

Recibo un valor de retorno en forma de código nativo largo o int de Android en Android, que quiero convertir o hacer coincidir con enum, para fines de procesamiento. Es posible ? ¿Cómo?Cómo hacer coincidir int a enum

Respuesta

57

Si usted tiene el control total de los valores y las enumeraciones, y son secuenciales, puede utilizar la enumeración valor ordinal:

enum Heyo 
{ 
    FirstVal, SecondVal 
} 

...later 

int systemVal = [whatever]; 
Heyo enumVal = Heyo.values()[systemVal]; 

int againSystemVal = enumVal.ordinal(); 
+5

No se recomienda el uso del ordinal para obtener un "valor" para una enumeración. En su lugar, use un campo de instancia en su lugar. Vea el Item 31 en la 2da edición de Effective Java de Josh Bloch. –

50

Puede configurar su enumeración para que tenga el int largo o integrado.

por ejemplo: Crear este archivo ePasswordType.java

public enum ePasswordType { 

    TEXT(0), 
    NUMBER(1); 

    private int _value; 

    ePasswordType(int Value) { 
     this._value = Value; 
    } 

    public int getValue() { 
      return _value; 
    } 

    public static ePasswordType fromInt(int i) { 
     for (ePasswordType b : ePasswordType .values()) { 
      if (b.getValue() == i) { return b; } 
     } 
     return null; 
    } 
} 

A continuación, puede acceder a los valores asignados de esta manera:

ePasswordType var = ePasswordType.NUMBER; 

int ValueOfEnum = var.getValue(); 

Para obtener la enumeración cuando sólo se conoce el int, el uso esto:

ePasswordType t = ePasswordType.fromInt(0); 

Enumerados en java son ve poderoso porque cada valor puede ser su propia clase.

+3

Este es un enfoque mucho mejor que usar ordinal(). Para saber por qué, lea Java efectivo –

+0

@Kuffs: ¿Existe también una forma adecuada de ** establecer ** la enumeración utilizando el valor entero? – Levit

+0

@Levit El valor se establece en tiempo de diseño, no en tiempo de ejecución. Si quieres decir recuperar el valor enum cuando solo conoces el int, mira mi respuesta editada. – Kuffs

Cuestiones relacionadas