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
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();
È 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.
Si tratta di un approccio molto migliore rispetto all'utilizzo di ordinali(). Per sapere perché, leggi Java efficace –
@Kuffs: Esiste anche un modo corretto per ** impostare ** l'enumerazione utilizzando il valore intero? – Levit
@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
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. –