关于java:如何将枚举值转换为int?

How to convert enum value to int?

我有一个返回int类型的函数。但是,我只有一个税收枚举的值。

如何将纳税枚举值强制转换为int?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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;
}


您需要让枚举以某种方式公开value,例如

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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
2
3
4
5
6
7
8
9
10
11
12
13
14
public enum Color {

   White,

   Green,

   Blue,

   Purple,

   Orange,

   Red
}

然后:

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


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

如果需要表示枚举值的唯一数字,可以使用ordinal()


有时,一些C方法使Java世界中的生活变得更简单。

1
2
3
4
5
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;


也许使用字符串表示比使用整数更好,因为如果将值添加到枚举中,字符串仍然有效。可以使用枚举的name()方法将枚举值转换为字符串;使用枚举的valueof()方法再次从字符串创建枚举表示形式。以下示例显示如何将枚举值转换为字符串并返回(valuetype是枚举):

1
2
3
4
5
6
7
8
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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.
}