如何通过索引值访问Java枚举中的特定成员?
我想打印第二个索引值,即SUMMER如何通过索引值访问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!! } } 如何实现它?您可以通过键入所需的值来访
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);
}