web-dev-qa-db-ja.com

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;
}
210
vrbilgi

どういうわけか、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();
}

(私は名前をもう少し慣習的で読みやすい名前に変更しました。)

これはをコンストラクタに代入したいと仮定しています。それがあなたが望まないものであるならば、あなたは私たちにもっと多くの情報を与える必要があります。

319
Jon Skeet

私はこれが好きです:

public enum Color {

   White,

   Green,

   Blue,

   Purple,

   Orange,

   Red
}

その後:

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

あなたがあなたがコンストラクタで割り当てている値が欲しいならば、あなたはその値を返すためにenum定義の中でメソッドを追加する必要があります。

列挙値を表す一意の番号が必要な場合は、ordinal()を使用できます。

18
unholysampler

いつかある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;
11
Vladi

おそらく、整数よりも文字列表現を使用する方が良いでしょう。なぜなら、値が列挙に追加されても文字列は有効なままだからです。 enumのname()メソッドを使用してenum値をStringに変換したり、enumのvalueOf()メソッドを使用してStringからenum表現を再度作成することができます。次の例は、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");
2
Mike
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.
}
0
Ieshaan Saxena