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

如何通过索引值访问Java枚举中的特定成员?,java,enums,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!! } } 如何实现它?您可以通过键入所需的值来访

我想打印第二个索引值,即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!!
    }
}

如何实现它?

您可以通过键入所需的值来访问它们,例如,
Season.WINTER
,调用
Season.valueOf(“WINTER”)
,或迭代
.values()
结果,并按照@Stultuske的说明选择所需内容

如果在中搜索
.values()
,可能找不到它,因为此方法是由编译器添加的。看看这个

如果需要通过索引值实际访问枚举,只需使用
seasure.values()[someIndex]
,因为
.values()
返回一个数组
T[]


查找有关枚举的更多信息。

System.out.println(seasure.values()[2])

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

Season.values()[index]

您的代码几乎可以正常工作。仔细查看
Enum#values
()的方法签名

它不是一个接受参数的方法,它返回整个数组。因此,您需要将方法后的访问切换为数组访问

Season.values()[2]


您应该避免按索引访问
Enum
。它们取决于它们在代码中的顺序。如果您执行一些重构,如“按字母顺序对项目排序”:

或者稍后在不记住您的顺序依赖代码的情况下将一些值添加到枚举,然后您将中断代码。相反,您可以设置
映射


季节。夏天是一条路要走。或者迭代.values()结果,然后选择第二个我实际上希望通过索引值访问它的值。
seasure.values()[2]
…因此:看看values()返回的值,并获取该索引。您应该避免通过索引访问
Enum
。它们取决于它们在代码中的顺序。如果您执行一些重构,如“按字母顺序对项目排序”,或稍后在不记住顺序相关代码的情况下向枚举中添加一些值,那么您将破坏代码。相反,您可以设置一个
地图
。复制粘贴我的评论并得到错误的名称?尼斯:那真的很有用。但正如您声明的Map indexToSeason=newhashmap();它不应该像indexToSeason.put(0,季节。冬季)一样;等等?@Zabuza您可能应该使用
新HashMap(6)
,因为默认初始容量是16,您不需要那么多。默认负载系数为0.75,因此6对于4个项目来说是最佳的。@TheKarlo95的观点很好,但我怀疑这种微观优化在这方面会有多大帮助。在最坏的情况下,这只会让读者感到困惑。另一种选择是使用Java9中非常优化的工厂方法
Map.of(…)
public enum Season {
    FALL,    // 3 -> 0
    SPRING,  // 1 -> 1
    SUMMER,  // 2 -> 2
    WINTER   // 0 -> 3
}
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);
public Season getSeasonByIndex(int index) {
    return indexToSeason.get(index);
}