当前位置: 首页 > 知识库问答 >
问题:

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

南宫建白
2023-03-14

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

怎么才能实现呢?

共有3个答案

钦侯林
2023-03-14

您可以通过键入所需的值来访问它们,例如,<代码>季节。冬季,呼唤季节。valueOf(“WINTER”),或在上迭代。values()结果,并按照@Stultuske所述选择所需内容。

如果您搜索。values()在类Enum中可能找不到它,因为此方法是由编译器添加的。检查此答案。

如果需要通过索引值访问枚举,只需使用季节。values()[someIndex],自。values()返回数组。

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

李昌勋
2023-03-14

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

Season.values()[index]
顾穆冉
2023-03-14

您的代码几乎可以正常工作。仔细查看枚举值的方法签名(文档)。

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

Season.values()[2]

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

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);
}
 类似资料:
  • 枚举具有名为'hash value'的属性,该属性是枚举内的索引。

  • 问题内容: 我在Java中有一个枚举: 我想按索引访问枚举值,例如 我该怎么办? 问题答案: 试试这个

  • 问题内容: 通过阅读SCJP书籍,我在第1章“自测”中发现了类似的内容: 注意:代码编译正常。我不明白的是为什么我们可以从变量访问DOG,CAT或FISH常量。我认为(并且也写在书中)DOG,FISH,CAT是常量,其实现方式类似于。 所以,如果它们确实是静态的,为什么我们可以从中访问它们呢?最后一行是我熟悉的方式。 问题答案: 写作 和写作一样。也就是说,编译器将用其编译时类型Animal替换变

  • 我对Java很陌生,只是有点纠结于数组。我有一个代码块,我已经写了当遵循教程,但正在努力理解它,希望有人能解释给我。 null 对不起,如果这是一个琐碎的问题给你,但这是最好的地方,我可以想到转向。

  • 问题内容: 我试图在把手模板内的数组中指定项的索引: 使用这个: 如果上述方法不可行,我将如何编写一个可以访问数组中特殊项目的助手? 问题答案: 尝试这个:

  • 问题内容: 我正在使用selenium,并且正在使用功能FindElements,所以我正在获取实现IReadOnlyCollection接口的元素。我想遍历列表,但似乎IReadOnlyCollection没有诸如Get(int index)或操作[]的实现之类的任何方法。 我想避免将结果转换为List或数组,因为我只想访问元素以读取它们。 目前,我不想使用foreach,因为我需要管理索引,以