Mam funkcję, która zwraca typ int. Mam jednak tylko wartość wyliczenia podatku.
Jak mogę rzutować wartość wyliczenia podatku na 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;
}
Odpowiedzi:
Trzeba by
value
jakoś ujawnić wyliczenie , np(Zmieniłem nazwy, aby były nieco bardziej konwencjonalne i czytelne, przy okazji).
Jest to zakładając chcesz wartość przypisaną w konstruktorze. Jeśli nie tego chcesz, musisz podać nam więcej informacji.
źródło
Tax
i chce z niej uzyskać wartość liczbową.myEnumValue = MyEnum.valueOf(myInt);
że arg musi być typu String - czy jest coś, czego mi brakuje?Wolę to:
następnie:
źródło
.ordinal()
Jeśli chcesz przypisać wartość do konstruktora, musisz dodać metodę do definicji wyliczenia, aby zwrócić tę wartość.
Jeśli chcesz unikalny numer reprezentujący wartość wyliczenia, możesz użyć
ordinal()
.źródło
ordinal()
ważnych przypadkach użyciaordinal()
. Jeśli chcesz zapisać unikalną wartośćenum
, po prostu zapiszenum
. Istnieją EnumSets, Listy Enums, EnumMaps i prawie każda inna kolekcja Enum, która może być dostępna.ordinal()
ponieważ OP nie wyjaśniło, czym naprawdę jest int.ordinal()
wewnętrznego w samym wyliczeniu. Na przykład, że mam enum nazwie „Season
”, który zawiera wartościSpring
,Summer
,Autumn
, iWinter
, i to metoda publiczna o nazwienext()
, która zwracavalues()[(ordinal() + 1) % 4]
Zewnętrznie, brak kodu kiedykolwiek widzi numer porządkowy, i nigdy nie będzie dodatkowych członków w tym wyliczenia, więc wygląda na to, że jest to poprawny przypadek użycia.ordinal()
zawiasu na odległym kodzie są łamane przez zmiany stałych wyliczania wyliczenia. Jeśli zamierzasz zmodyfikować stałe wyliczenia, musisz już znajdować się w tym pliku. Większość wyliczeń jest dość krótka, a jeśli nie, powinieneś dokładnie sprawdzić plik. W obu przypadkach prawdopodobnie powinieneś mieć test jednostkowy obejmujący twojąnext()
metodę.Czasami pewne podejście w C # ułatwia życie w świecie Java ..:
źródło
Być może lepiej jest użyć reprezentacji ciągu niż liczby całkowitej, ponieważ ciąg jest nadal ważny, jeśli wartości są dodawane do wyliczenia. Możesz użyć metody enum name () do przekonwertowania wartości enum na String i metody enum valueOf () w celu ponownego utworzenia reprezentacji enum z String. Poniższy przykład pokazuje, jak przekonwertować wartość wyliczenia na String i wstecz (ValueType jest wyliczeniem):
źródło
źródło
Nieco innym podejściem (przynajmniej na Androidzie) jest użycie adnotacji IntDef do połączenia zestawu stałych int
Użyj jako parametru funkcji:
lub w deklaracji zmiennej:
źródło