如何通过Index值访问Java枚举中的特定成员?

And*_*son 3 java enums

我想打印第二个索引值,即SUMMER.

public class Filer
{
    public enum Season { WINTER, SPRING, SUMMER, FALL }

    public static void main(String[] args)
    {
        System.out.println(Season.values(2));//values don't take argument!!
    }
}
Run Code Online (Sandbox Code Playgroud)

怎么能实现呢?

Zab*_*uza 8

你的代码几乎可以工作 仔细查看Enum#values(文档)的方法签名.

它不是接受参数的方法,它返回整个数组.所以你需要在方法之后将访问权限转移为数组访问:

Season.values()[2]
Run Code Online (Sandbox Code Playgroud)

您应该避免Enum通过索引访问.它们取决于代码中的顺序.如果你做一些重构,比如"按字母排序项目":

public enum Season {
    FALL,    // 3 -> 0
    SPRING,  // 1 -> 1
    SUMMER,  // 2 -> 2
    WINTER   // 0 -> 3
}
Run Code Online (Sandbox Code Playgroud)

或更高一些值添加到您的枚举,无需记住您的订单依赖的代码,那么你会破坏你的代码.相反,您可以设置Map<Integer, Season>:

Map<Integer, Season> indexToSeason = new HashMap<>();
indexToSeason.put(0, Season.WINTER);
indexToSeason.put(1, Season.SPRING);
indexToSeason.put(2, Season.SUMMER);
indexToSeason.put(3, Season.FALL);
Run Code Online (Sandbox Code Playgroud)

然后使用该地图进行访问:

public Season getSeasonByIndex(int index) {
    return indexToSeason.get(index);
}
Run Code Online (Sandbox Code Playgroud)


Mat*_*egg 5

如果要获取特定索引的枚举,请尝试:

Season.values()[index]
Run Code Online (Sandbox Code Playgroud)