你如何在java中使用enumMap?我想使用enumMap来获取从0到n的常量命名值,其中n是size。但我不明白oracle网站上的描述> EnumMap
我试着在这里使用一个
package myPackage;
import java.util.EnumMap;
public class Main{
public static enum Value{
VALUE_ONE, VALUE_TWO, SIZE
}
public static EnumMap<Value, Integer> x;
public static void main(String[] args){
x.put(Value.VALUE_ONE, 0);
x.put(Value.VALUE_TWO, 1);
x.put(Value.SIZE, 2);
int[] myArray = new int[SIZE];
}
}
这不起作用。你应该如何使用enumMap?
对于枚举中的每个元素,还有一种方法可以不使用x.put(Value.VALUE_ONE, 0);
吗?
答案 0 :(得分:20)
请勿尝试在枚举中存储大小,EnumMap
有size
方法。
public static enum Value{
VALUE_ONE, VALUE_TWO
}
此外,枚举类型具有静态方法values
,您可以使用它来获取实例数组。您可以使用它循环并将它们添加到EnumMap
public static void main(String[] args){
for(int i = 0; i < Value.values().length ; i++) {
x.put(Value.values()[i], i);
}
int[] myArray = new int[x.size()];
}
您还需要确保初始化EnumMap
,否则您将拥有NullPointerException
:
public static EnumMap<Value, Integer> x = new EnumMap<>(Value.class);
如果你要做的只是通过索引检索枚举值,那么你根本不需要EnumMap
。只有在尝试分配任意值时,这才有用。
您可以使用values
方法通过索引获取任何枚举:
Value.values()[INDEX]
答案 1 :(得分:6)
您忘记在代码中初始化EnumMap。
你可以在x.put之前在main中初始化它:
x = new EnumMap<Value, Integer>(Value.class);
使用你的数组:
int[] myArray = new int[x.get(Value.SIZE)];
答案 2 :(得分:2)
public static EnumMap<Value, Integer> x = new EnumMap<Value, Integer>(Value.class);