Cómo convertir valor enum a int?


Tengo una función que devuelve un tipo int. Sin embargo, solo tengo un valor de la enumeración de IMPUESTOS.

¿Cómo puedo emitir el valor de enumeración de IMPUESTOS a un int?

public enum TAX {
    NOTAX(0),SALESTAX(10),IMPORTEDTAX(5);

    private int value;
    private TAX(int value){
        this.value = value;
    }
}

TAX var = TAX.NOTAX; // This value will differ

public int getTaxValue()
{
  // what do do here?
  // return (int)var;
}
 192
Author: vrbilgi, 2011-11-16

5 answers

Usted tendría que hacer que la enumeración exponer value de alguna manera, por ejemplo,

public enum Tax {
    NONE(0), SALES(10), IMPORT(5);

    private final int value;
    private Tax(int value) {
        this.value = value;
    }

    public int getValue() {
        return value;
    }
}

...

public int getTaxValue() {
    Tax tax = Tax.NONE; // Or whatever
    return tax.getValue();
}

(He cambiado los nombres para ser un poco más convencional y legible, por cierto.)

Esto es suponiendo que desea que el valor asignado en el constructor. Si eso no es lo que quieres, tendrás que darnos más información.

 298
Author: Jon Skeet,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-11-16 19:54:01

Prefiero esto:

public enum Color {

   White,

   Green,

   Blue,

   Purple,

   Orange,

   Red
}

Entonces:

//cast enum to int
int color = Color.Blue.ordinal();
 176
Author: vivia,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-04-11 03:06:40

Si desea el valor que está asignando en el constructor, debe agregar un método en la definición de enumeración para devolver ese valor.

Si desea un número único que represente el valor de la enumeración, puede usar ordinal().

 16
Author: unholysampler,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-11-16 19:54:07

En algún momento algún enfoque de C# hace la vida más fácil en el mundo de Java..:

class XLINK {
static final short PAYLOAD = 102, ACK = 103, PAYLOAD_AND_ACK = 104;
}
//Now is trivial to use it like a C# enum:
int rcv = XLINK.ACK;
 9
Author: Vladi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-10 14:06:41

Tal vez sea mejor usar una representación de cadena que un entero, porque la cadena sigue siendo válida si se agregan valores a la enumeración. Puedes usar el método enum's name() para convertir el valor enum en una Cadena y el método enum's valueOf () para crear una representación enum de la cadena de nuevo. El siguiente ejemplo muestra cómo convertir el valor de la enumeración en Cadena y viceversa (ValueType es una enumeración):

ValueType expected = ValueType.FLOAT;
String value = expected.name();

System.out.println("Name value: " + value);

ValueType actual = ValueType.valueOf(value);

if(expected.equals(actual)) System.out.println("Values are equal");
 1
Author: Mike,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-12 17:45:49