Tengo una función que devuelve un tipo int. Sin embargo, solo tengo un valor de la enumeración de impuestos.
¿Cómo puedo convertir 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;
}
Respuestas:
Tendría que hacer que la enumeración se exponga de
value
alguna manera, por ejemplo(He cambiado los nombres para que sean un poco más convencionales y legibles, por cierto).
Esto supone que desea el valor asignado en el constructor. Si eso no es lo que desea, deberá proporcionarnos más información.
fuente
Tax
y desea obtener el valor numérico de él.myEnumValue = MyEnum.valueOf(myInt);
el argumento tiene que ser de tipo String, ¿o hay algo que me falta?Prefiero esto:
luego:
fuente
.ordinal()
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 enumeración, puede usarlo
ordinal()
.fuente
ordinal()
los casos de uso válidosordinal()
. Si necesita almacenar un valor único para elenum
, simplemente almacene elenum
. Hay EnumSets, Listas de Enums, EnumMaps y casi cualquier otra colección de Enum que desee tener disponible.ordinal()
porque el OP no dejó en claro qué quería que fuera realmente el int.ordinal()
internamente dentro del enum. Por ejemplo, decir que tengo una enumeración llamada "Season
", que contiene los valoresSpring
,Summer
,Autumn
, yWinter
, y tiene un método público denominadonext()
el cual devuelvevalues()[(ordinal() + 1) % 4]
el exterior, hay un código cada vez ve el número ordinal, y nunca habrá miembros adicionales en esta enumeración, entonces parece un caso de uso válido.ordinal()
bisagra en el código remoto se rompen por los cambios en las constantes de enumeración de enumeración. Si va a modificar las constantes de la enumeración, ya debería estar en ese archivo. La mayoría de las enumeraciones son bastante cortas, y si no es así, debería verificar el archivo más a fondo de todos modos. En ambos casos, probablemente debería hacerse una prueba unitaria que cubra sunext()
método de todos modos.En algún momento, un enfoque de C # hace la vida más fácil en el mundo Java ...:
fuente
Quizás 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. Puede utilizar el método name () de la enumeración para convertir el valor de enumeración en una Cadena y el método valueOf () de la enumeración para crear una representación de enumeración a partir de la Cadena nuevamente. El siguiente ejemplo muestra cómo convertir el valor enum a String y viceversa (ValueType es una enumeración):
fuente
fuente
Un enfoque algo diferente (al menos en Android) es usar la anotación IntDef para combinar un conjunto de constantes int
Usar como parámetro de función:
o en una declaración variable:
fuente