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

当前回答

一个有点不同的方法(至少在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;

其他回答

public enum ProfileType {
PRIVATE,
PUBLIC
}

private ProfileType profileType = ProfileType.PRIVATE;

如果你想从profileType获取int,你可以简单地做:

int profileTypeInt = profileType.ordinal();

一个有点不同的方法(至少在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;

也许使用String表示比使用整数更好,因为如果将值添加到枚举中,String仍然有效。您可以使用枚举的name()方法将枚举值转换为String,然后使用枚举的valueOf()方法再次从String创建枚举表示。下面的例子展示了如何将enum值转换为String和返回(ValueType是enum):

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");

有时候,一些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;

我更喜欢这个:

public enum Color {

   White,

   Green,

   Blue,

   Purple,

   Orange,

   Red
}

然后:

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