2011-11-03 2 views
43

Sto ricevendo il valore restituito sotto forma di long o int da codice nativo in Android, che voglio convertire o abbinare con enum, per scopi di elaborazione. È possibile ? Come?Come corrispondere a enum

risposta

57

Se avete il pieno controllo di valori e di enumerazioni, e sono sequenziale, è possibile utilizzare l'enum valore ordinale:

enum Heyo 
{ 
    FirstVal, SecondVal 
} 

...later 

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

int againSystemVal = enumVal.ordinal(); 
+5

L'uso dell'ordinale per ottenere un "valore" per un enum non è raccomandato. Invece, utilizzare invece un campo di istanza. Vedi l'articolo 31 della 2a edizione di Josh Bloch's Effective Java. –

50

È possibile impostare l'enumerazione in modo che abbia il valore long o int integrato.

esempio: Creare questo file 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; 
    } 
} 

È quindi possibile accedere ai valori assegnati in questo modo:

ePasswordType var = ePasswordType.NUMBER; 

int ValueOfEnum = var.getValue(); 

Per ottenere l'enum quando si conosce solo l'int, l'uso this:

ePasswordType t = ePasswordType.fromInt(0); 

Enums in java are ve potente come ogni valore può essere la sua classe.

+3

Si tratta di un approccio molto migliore rispetto all'utilizzo di ordinali(). Per sapere perché, leggi Java efficace –

+0

@Kuffs: Esiste anche un modo corretto per ** impostare ** l'enumerazione utilizzando il valore intero? – Levit

+0

@Levit Il valore è impostato in fase di progettazione non in fase di esecuzione. Se si intende recuperare il valore enum quando si conosce solo l'int, vedere la mia risposta modificata. – Kuffs