У меня есть функция, которая возвращает тип 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;
}
Ответы:
Вам нужно было бы как-
value
нибудь выставить enum , например(Кстати, я изменил названия, чтобы они стали более привычными и удобочитаемыми.)
Это предполагает, что вы хотите значение, назначенное в конструкторе. Если это не то, что вы хотите, вам нужно дать нам больше информации.
источник
Tax
и хочет получить из него числовое значение.myEnumValue = MyEnum.valueOf(myInt);
arg должен иметь тип String - или я что-то упускаю?Я предпочитаю это:
затем:
источник
.ordinal()
Если вы хотите, чтобы значение, которое вы назначаете в конструкторе, вам нужно добавить метод в определение enum, чтобы вернуть это значение.
Если вам нужен уникальный номер, представляющий значение перечисления, вы можете использовать
ordinal()
.источник
ordinal()
чем действительные варианты использованияordinal()
. Если вам нужно сохранить уникальное значение дляenum
, то просто сохранитеenum
. Существуют EnumSets, Списки Enum, EnumMaps и почти любая другая коллекция Enum, которую вы можете захотеть получить.ordinal()
потому что ОП не давал понять, что он хочет, чтобы int был на самом деле.ordinal()
внутри самого перечисления? Например, у меня есть перечисление под названием «Season
» , который содержит значениеSpring
,Summer
,Autumn
иWinter
, и это не публичный метод называетсяnext()
возвращающимvalues()[(ordinal() + 1) % 4]
Наружно, не код когда - нибудь увидит порядковый номер, и никогда не будут дополнительные членами в этом перечислении, так что это похоже на действительный вариант использования.ordinal()
шарнира в далеко идущем коде, нарушаются из-за изменений в константах перечисления. Если вы собираетесь изменить константы перечисления, вы уже должны быть в этом файле. Большинство перечислений довольно короткие, и если это не так, вы все равно должны проверить файл более тщательно. В обоих случаях у вас, вероятно,next()
все равно должен быть модульный тест, охватывающий ваш метод.Иногда какой-то подход C # облегчает жизнь в мире Java ..:
источник
Возможно, лучше использовать представление String, чем целое число, потому что String все еще действителен, если значения добавляются в перечисление. Вы можете использовать метод enum name () для преобразования значения перечисления в строку и метод перечисления valueOf () для повторного создания представления перечисления из строки. В следующем примере показано, как преобразовать значение перечисления в String и обратно (ValueType является перечислением):
источник
источник
Несколько иной подход (по крайней мере, для Android) заключается в использовании аннотации IntDef для объединения набора констант int
Использовать в качестве параметра функции:
или в объявлении переменной:
источник