我想打印第二个索引值,即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!!
}
}
如何实现这个目标?
Enum#values
方法的签名(文档)。Season.values()[2]
您应该避免通过索引访问Enum
。它们依赖于代码中的顺序。如果您进行一些重构,比如"按字母顺序排序项目":
public enum Season {
FALL, // 3 -> 0
SPRING, // 1 -> 1
SUMMER, // 2 -> 2
WINTER // 0 -> 3
}
如果您想在枚举中添加一些值,而不必记住它们的顺序,那么您可能会破坏您的代码。相反,您可以设置一个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);
然后使用该地图进行访问:
public Season getSeasonByIndex(int index) {
return indexToSeason.get(index);
}
new HashMap<>(6)
,因为默认初始容量为16,你不需要那么多。默认的负载因子是0.75,所以6是4个元素的最佳选择。 - TheKarlo95Map.of(...)
,它来自于 Java 9。 - ZabuzardSeason.values()[index]
Season.WINTER
、调用 Season.valueOf("WINTER")
或迭代 .values()
的结果并选择所需的内容(如 @Stultuske 所述)来访问它们。.values()
,可能找不到它,因为该方法是由编译器添加的。请参见这个答案。Season.values()[someIndex]
,因为 .values()
返回一个数组 T[]
。System.out.println(Season.values()[2]);
Season.values()[2]
... - Mark RotteveelEnum
。它们依赖于代码中的顺序。如果您进行一些重构,例如“按字母顺序排序项目”,或稍后添加一些值到枚举中而不记得您的顺序相关代码,则会破坏您的代码。相反,您可以设置一个Map<Integer, Season>
。 - Zabuzard