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