【问题标题】:How to use enumMap in java如何在java中使用enumMap
【发布时间】:2014-12-09 01:44:08
【问题描述】:

如何在 java 中使用 enumMap?我想使用 enumMap 来获取从 0 到 n 的常量命名值,其中 n 是大小。但是看不懂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);

【问题讨论】:

  • 定义This doesn't work。你不需要把 SIZE 因为x.size() 会给你尺寸。
  • x.size() 是 3,但我想要 SIZE,它应该等于 2
  • 包含 SIZE 元素在内的三个元素。如果您删除 SIZE 元素,它将给出预期的结果 2。

标签: java arrays enums


【解决方案1】:

不要尝试在枚举中存储大小,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]

【讨论】:

    【解决方案2】:
    public static EnumMap<Value, Integer> x = new EnumMap<Value, Integer>(Value.class);
    

    【讨论】:

      【解决方案3】:

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

      你可以在 x.put 之前在 main 中初始化它:

      x = new EnumMap<Value, Integer>(Value.class);
      

      然后像这样使用你的数组:

      int[] myArray = new int[x.get(Value.SIZE)];
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-05-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-18
        • 1970-01-01
        相关资源
        最近更新 更多