Как преобразовать значение enum в int?
У меня есть функция, возвращающая тип int. Однако у меня есть только значение перечисления TAX.
Как я могу присвоить значение перечисления TAX для 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;
}
Ответы
Ответ 1
Вам нужно сделать enum разоблачить value
каким-то образом, например.
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();
}
(Я изменил имена, чтобы быть более обычным и читаемым, кстати.)
Предполагается, что вы хотите присвоить значение в конструкторе. Если это не то, что вы хотите, вам нужно предоставить нам дополнительную информацию.
Ответ 2
Я предпочитаю это:
public enum Color {
White,
Green,
Blue,
Purple,
Orange,
Red
}
то
//cast enum to int
int color = Color.Blue.ordinal();
Ответ 3
Если вы хотите присвоить значение в конструкторе, вам нужно добавить метод в определение перечисления, чтобы вернуть это значение.
Если вам нужен уникальный номер, представляющий значение перечисления, вы можете использовать ordinal()
.
Ответ 4
Когда-то какой-то подход С# облегчает жизнь в мире 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;
Ответ 5
Может быть, лучше использовать представление String, чем целое число, потому что строка остается действительной, если значения добавлены в перечисление. Вы можете использовать метод enum name() для преобразования значения enum в String и метод enum valueOf() для создания представления перечисления из строки снова. В следующем примере показано, как преобразовать значение перечисления в String и обратно (ValueType - это перечисление):
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");
Ответ 6
public enum Tax {
NONE(1), SALES(2), IMPORT(3);
private final int value;
private Tax(int value) {
this.value = value;
}
public String toString() {
return Integer.toString(value);
}
}
class Test {
System.out.println(Tax.NONE); //Just an example.
}
Ответ 7
Несколько иной подход (по крайней мере, для Android) - использовать аннотацию IntDef для объединения набора констант int
@IntDef({NOTAX, SALESTAX, IMPORTEDTAX})
@interface TAX {}
int NOTAX = 0;
int SALESTAX = 10;
int IMPORTEDTAX = 5;
Использовать как параметр функции:
void computeTax(@TAX int taxPercentage){...}
или в объявлении переменной:
@TAX int currentTax = IMPORTEDTAX;