[英]How to get an Enum using its value
我正在开发一个Android应用程序:
我有这个Enum
:
public enum Gender
{
male (0, MyApplication.getAppContext().getString(R.string.male)),
female (1, MyApplication.getAppContext().getString(R.string.female));
private final int gender;
private final String description;
Gender(int aGender, String aDescription)
{
gender = aGender;
description = aDescription;
}
public int getValue() { return gender; }
@Override
public String toString() { return description; }
/**
* Returns all values in this Enum sorted alphabetically by
* description.
* @return All values sorted.
*/
public static Gender[] getSortedVaules()
{
Gender[] sorted = values();
Arrays.sort(sorted, EnumByNameComparator.INSTANCE);
return sorted;
}
}
假设我的int gender = 1
。 在这种情况下, Gender.female
的值为1。
我想使用gender
变量来获取Gender.getSortedValues()
返回的array
中Gender.female
枚举的索引。
我认为我必须使用gender
变量来获取其Gender表示形式,换句话说,要获取一个以Gender.female
为值的枚举变量。 然后,使用该枚举变量搜索Gender.getSortedValues()
。 但我不知道如何使用其值获取枚举。
我怎样才能做到这一点?
如果您的整数是该枚举的gender
成员,则应向枚举添加静态方法:
public static Gender getByInt(final int i)
{
for (final Gender g: values())
if (g.gender == i)
return g;
return null; // not found
}
然后,您将调用Gender.getByInt(...);
。
但是Enum
也具有.valueOf()
: Enum.valueOf(Gender.class, "male")
或Gender.valueOf("male")
; 请注意,如果没有这样的值,它将抛出IllegalArgumentException
。
另请参阅有关.ordinal()
。 用于Enum
Javadoc 。
最后说明:命名您的int gender
令人困惑。
删除成员字段性别。 您会以一种已经很完美的序数类型引入一个潜在的非唯一字段,这可能会在以后导致编程错误。
然后,当您必须在某个地方序列化枚举时,只需依靠ordinal()方法即可。 使用循环和身份比较进行查找(如fge所建议)。
对于排序后的值,请使用不可变的静态列表(或其他索引集合)而不是数组,因为这样便可以轻松使用list.indexOf(myEnum)且仅需排序一次。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.