0

我正在开发一个 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枚举索引。arrayGender.getSortedValues()

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

我怎样才能做到这一点?

4

2 回答 2

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(). 用于Enum.


最后一点:命名你的 intgender是令人困惑的。

于 2013-07-13T09:38:03.873 回答
0

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

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

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

于 2013-07-13T09:52:10.847 回答