如何将枚举值转换为int?

时间:2011-11-16 19:50:49

标签: java enums

我有一个返回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;
}

8 个答案:

答案 0 :(得分:318)

你需要以某种方式使枚举公开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();
}

(我已将名称更改为更传统和可读,顺便说一句。)

这是假设您想要在构造函数中指定的值。如果这不是您想要的,您需要向我们提供更多信息。

答案 1 :(得分:192)

我更喜欢这个:

public enum Color {

   White,

   Green,

   Blue,

   Purple,

   Orange,

   Red
}

然后:

//cast enum to int
int color = Color.Blue.ordinal();

答案 2 :(得分:18)

如果您想要在构造函数中指定的值,则需要在枚举定义中添加一个方法来返回该值。

如果您想要一个代表枚举值的唯一数字,可以使用ordinal()

答案 3 :(得分:11)

有时候,一些C#方法会让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;

答案 4 :(得分:2)

使用String表示而不是整数可能更好,因为如果将值添加到枚举中,String仍然有效。您可以使用enum的name()方法将枚举值转换为String和enum的valueOf()方法,以再次从String创建枚举表示。以下示例显示如何将枚举值转换为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");

答案 5 :(得分:0)

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.
}

答案 6 :(得分:0)

一种稍微不同的方法(至少在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;

答案 7 :(得分:0)

public enum ProfileType {
PRIVATE,
PUBLIC
}

private ProfileType profileType = ProfileType.PRIVATE;

如果你想从 profileType 得到 int 你可以简单地做:

int profileTypeInt = profileType.ordinal();