繁体   English   中英

如何使用其值获取枚举

[英]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()返回的arrayGender.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM