web-dev-qa-db-fra.com

Comment convertir une valeur enum en int?

J'ai une fonction qui retourne un type int. Cependant, je n'ai qu'une valeur de l'énumération TAX.

Comment convertir la valeur d'énumération TAX en un entier?

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

Vous devez faire enum exposer value d'une manière ou d'une autre, par exemple.

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();
}

(J'ai changé les noms pour qu'ils soient un peu plus classiques et lisibles, au fait.)

Ceci est en supposant que vous voulez la valeur assignée dans le constructeur. Si ce n'est pas ce que vous voulez, vous devrez nous donner plus d'informations.

311
Jon Skeet

Je préfère ça:

public enum Color {

   White,

   Green,

   Blue,

   Purple,

   Orange,

   Red
}

puis:

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

Si vous souhaitez que la valeur que vous affectez dans le constructeur, vous devez ajouter une méthode dans la définition enum pour renvoyer cette valeur.

Si vous voulez un nombre unique qui représente la valeur enum, vous pouvez utiliser ordinal().

17
unholysampler

Parfois, une approche C # facilite la vie dans le monde 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

Peut-être est-il préférable d'utiliser une représentation sous forme de chaîne plutôt qu'un entier, car la chaîne est toujours valide si des valeurs sont ajoutées à l'énum. Vous pouvez utiliser la méthode name () de enum pour convertir la valeur enum en une méthode String et la méthode valueOf () de enum pour créer à nouveau une représentation enum à partir de String. L'exemple suivant montre comment convertir la valeur enum en String and back (ValueType est une 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