J'ai une fonction qui retourne un type int. Cependant, je n'ai qu'une valeur de l'énumération TAXE.
Comment puis-je 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;
}
Réponses:
Vous devriez faire en sorte que l'énumération soit
value
exposée, par exemple(J'ai changé les noms pour qu'ils soient un peu plus conventionnels et lisibles, btw.)
Cela suppose que vous souhaitiez la valeur affectée dans le constructeur. Si ce n'est pas ce que vous voulez, vous devrez nous donner plus d'informations.
la source
Tax
, et veut obtenir la valeur numérique de celui - ci.myEnumValue = MyEnum.valueOf(myInt);
l'argument doit être de type String - ou y a-t-il quelque chose qui me manque?Je préfère ça:
puis:
la source
.ordinal()
Si vous souhaitez que la valeur que vous affectez dans le constructeur, vous devez ajouter une méthode dans la définition d'énumération pour renvoyer cette valeur.
Si vous voulez un nombre unique qui représente la valeur d'énumération, vous pouvez utiliser
ordinal()
.la source
ordinal()
que de cas d'utilisation valides pourordinal()
. Si vous devez stocker une valeur unique pour leenum
, stockez simplement leenum
. Il existe des EnumSets, des listes d'énumérations, des EnumMaps et presque toutes les autres collections d'Enum dont vous pourriez avoir besoin.ordinal()
parce que l'OP n'a pas précisé ce qu'il voulait que l'int. Soit réellement.ordinal()
intérieur au sein de l'énum lui-même. Par exemple, dire que j'ai un ENUM appelé «Season
» qui contient les valeursSpring
,Summer
,Autumn
etWinter
, et il a une méthode publique appeléenext()
qui retournevalues()[(ordinal() + 1) % 4]
Extérieurement, aucun code ne voit jamais le nombre ordinal, et il n'y aura jamais d' autres membres dans cette ENUM, cela semble donc être un cas d'utilisation valide.ordinal()
charnière sur du code lointain sont brisés par des modifications des constantes d'énumération d'énumération. Si vous souhaitez modifier les constantes de l'énumération, vous devez déjà être dans ce fichier. La plupart des énumérations sont assez courtes, et si ce n'est pas le cas, vous devriez quand même vérifier le fichier de manière plus approfondie. Dans les deux cas, vous devriez probablement avoir un test unitaire couvrant votrenext()
méthode de toute façon.Parfois, une approche C # facilite la vie dans le monde Java ..:
la source
Il est peut-être préférable d'utiliser une représentation String plutôt qu'un entier, car la String est toujours valide si des valeurs sont ajoutées à l'énumération. Vous pouvez utiliser la méthode name () de l'énumération pour convertir la valeur d'énumération en chaîne et la méthode valueOf () de l'énumération pour recréer une représentation d'énumération à partir de la chaîne. L'exemple suivant montre comment convertir la valeur d'énumération en chaîne et retour (ValueType est une énumération):
la source
la source
Une approche quelque peu différente (au moins sur Android) consiste à utiliser l' annotation IntDef pour combiner un ensemble de constantes int
Utiliser comme paramètre de fonction:
ou dans une déclaration de variable:
la source