如何在java中使用enumMap

Sha*_*dow 5 java arrays enums

你如何在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];

    }

}
Run Code Online (Sandbox Code Playgroud)

这不起作用.你怎么用enumMap?

x.put(Value.VALUE_ONE, 0);对于枚举中的每个元素,还有一种方法可以做到吗?

Jus*_*tin 20

不要尝试在枚举中存储大小,EnumMap有一个size方法.

public static enum Value{
    VALUE_ONE, VALUE_TWO
}
Run Code Online (Sandbox Code Playgroud)

此外,枚举类型有一个静态方法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()];
}
Run Code Online (Sandbox Code Playgroud)

您还需要确保初始化,EnumMap否则您将拥有NullPointerException:

public static EnumMap<Value, Integer> x = new EnumMap<>(Value.class);
Run Code Online (Sandbox Code Playgroud)

如果您要做的只是通过索引检索枚举值,那么您根本不需要EnumMap.这只有在您尝试分配任意值时才有用.您可以使用以下values方法通过索引获取任何枚举:

Value.values()[INDEX]
Run Code Online (Sandbox Code Playgroud)


SMA*_*SMA 6

您忘记在代码中初始化EnumMap.

您可以在x.put之前在main中初始化它,例如:

x = new EnumMap<Value, Integer>(Value.class);
Run Code Online (Sandbox Code Playgroud)

并使用你的数组:

int[] myArray = new int[x.get(Value.SIZE)];
Run Code Online (Sandbox Code Playgroud)