Как преобразовать значение 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;