如何使用其值获取Enum

时间:2013-07-13 09:31:14

标签: java android

我正在开发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。在这种情况下,1是Gender.female的值。

我想使用gender变量来获取Gender.female返回的array中的Gender.getSortedValues()枚举索引。

我认为我必须使用gender变量来获取其性别表示,换句话说,获取带有Gender.female的枚举变量作为值。然后,使用该枚举变量在Gender.getSortedValues()上进行搜索。但是我不知道如何使用它的值获得枚举。

我该怎么做?

2 个答案:

答案 0 :(得分:3)

如果你有一个整数是这个枚举的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()Javadoc for Enum


最后注意事项:命名你的int gender令人困惑。

答案 1 :(得分:0)

删除会员字段性别。您在已经完美的序数类型中引入了一个潜在的非唯一字段,这可能导致稍后编程错误。

然后只需要依赖ordinal()方法,当你必须在某处序列化枚举时。使用循环和身份比较进行查找(如fge所示)。

对于排序值,使用不可变静态列表(或其他索引集合)而不是数组,因为这样您可以轻松地使用list.indexOf(myEnum)并且只需排序一次。