Eu tenho uma função que retorna um tipo int. No entanto, eu tenho apenas um valor da enumeração TAX.
Como converter o valor da enumeração TAX em um 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;
}
Respostas:
Você precisaria fazer a enum expor de
value
alguma forma, por exemplo(Alterei os nomes para serem um pouco mais convencionais e legíveis, aliás.)
Isso pressupõe que você deseja o valor designado no construtor. Se não é isso que você deseja, precisará nos fornecer mais informações.
fonte
Tax
e deseja obter o valor numérico dele.myEnumValue = MyEnum.valueOf(myInt);
o arg deve ser do tipo String - ou há algo que estou faltando?Eu prefiro isso:
então:
fonte
.ordinal()
Se você quiser o valor que está atribuindo no construtor, precisará adicionar um método na definição de enum para retornar esse valor.
Se você quiser um número único que representam o valor de enumeração, você pode usar
ordinal()
.fonte
ordinal()
que os casos de uso válidosordinal()
. Se você precisar armazenar um valor exclusivo para oenum
, basta armazenar oenum
. Existem EnumSets, Listas de Enums, EnumMaps e quase qualquer outra coleção de Enum que você queira estar disponível.ordinal()
porque o OP não deixou claro o que ele queria que o int fosse realmente.ordinal()
interno do próprio enum. Por exemplo, digamos que eu tenho um enum chamado de "Season
", que contém os valoresSpring
,Summer
,Autumn
, eWinter
, e tem um método público chamadonext()
que retornavalues()[(ordinal() + 1) % 4]
Externamente, nenhum código nunca vê o número ordinal, e nunca haverá membros adicionais nesta enumeração, portanto, parece um caso de uso válido.ordinal()
dobradiças em códigos distantes são quebrados por alterações nas constantes da enumeração de enumeração. Se você deseja modificar as constantes do enum, você já deve estar nesse arquivo. A maioria das enumerações é bastante curta e, caso contrário, você deve verificar o arquivo mais detalhadamente. Nos dois casos, você provavelmente deve ter um teste de unidade cobrindo seunext()
método de qualquer maneira.Em algum momento, uma abordagem em C # facilita a vida no mundo Java ..:
fonte
Talvez seja melhor usar uma representação String do que um número inteiro, porque a String ainda é válida se valores forem adicionados à enumeração. Você pode usar o método name () da enumeração para converter o valor da enumeração em String e o método valueOf () da enumeração para criar uma representação da enumeração da String novamente. O exemplo a seguir mostra como converter o valor da enumeração em String e vice-versa (ValueType é uma enumeração):
fonte
fonte
Uma abordagem um pouco diferente (pelo menos no Android) é usar a anotação IntDef para combinar um conjunto de constantes int
Use como parâmetro de função:
ou em uma declaração variável:
fonte