我将12个值存储在一个数组中,每个值代表一个月的一段数据.我有一年中所有月份的枚举,并希望能够选择显示正确数据的月份,而不是使用数组索引.有没有办法做到这一点?谢谢
我建议不要使用 enum 成员作为数组索引,因为 enum 成员的数字索引可能会发生变化(如果添加了新成员或者成员的顺序在 enum 类中发生了变化)。
相反,我会使用 aMap<Month, Data>以便每个枚举成员指向地图中的一个Data对象(或您需要使用的任何其他类型):
Map<Month, Data> monthMap = new HashMap<>();
monthMap.put(Month.MARCH, dataObject);
Data retrievedData = monthMap.get(Month.MARCH);
Run Code Online (Sandbox Code Playgroud)
更新:如果你Map使用一个枚举类型作为其键,然后它总是更有效地使用的EnumMap,而不是一个HashMap,TreeMap等,所以上面的代码会更好出发是这样的:
Map<Month, Data> monthMap = new EnumMap<>(Month.class);
Run Code Online (Sandbox Code Playgroud)
在幕后,EnumMap实际上维护一个索引与枚举实例对齐的数组,正如 OP 希望手动实现的那样。
如果你有一周的日子,如:
public enum Days {
SUNDAY, MONDAY, TUESDAY, WEDNESDAY,
THURSDAY, FRIDAY, SATURDAY
}
Run Code Online (Sandbox Code Playgroud)
和数组如: String days[]=new String[7]
数组中的索引只能通过int.所以你可以使用enum作为索引:
days[Days.SUNDAY.ordinal()]="sunday";
System.out.println(days[Days.SUNDAY.ordinal()]);
Run Code Online (Sandbox Code Playgroud)
Output:sunday
Ordinal() 返回的位置 enumenum声明中常量.但它看起来并不那么优雅.