在构造函数之外访问枚举参数?

时间:2016-05-25 01:00:20

标签: java enums

我在尝试使用枚举参数中的值填充静态地图时遇到了麻烦。我想在这里说的话的例子:

public enum LettersAndNumbers {
     A(1, 2),
     B(2, 3);

     private static HashMap<Integer, Integer> numbers = new HashMap<Integer, Integer();

     private LettersAndNumbers(int numberone, int numbertwo) {}

      // Somehow put arguments "numberone" and "numbertwo" into map

     public static Integer getNumberTwo(int numberone) {
          return numbers.get(numberone);
     }
}

有没有办法在静态块或构造函数外部的其他位置访问这些变量?我一直在寻找一段时间,但我找不到任何东西。

提前致谢。

1 个答案:

答案 0 :(得分:1)

您需要将numberonenumbertwo存储在enum 字段中。然后,您可以使用静态初始化块来迭代values()并将其存储在Map中。像,

public enum LettersAndNumbers {
    A(1, 2), B(2, 3);
    private int numberone;
    private int numbertwo;
    private static Map<Integer, Integer> numbers = new HashMap<>();
    static {
        for (LettersAndNumbers lan : LettersAndNumbers.values()) {
            numbers.put(lan.numberone, lan.numbertwo);
        }
    }

    private LettersAndNumbers(int numberone, int numbertwo) {
        this.numberone = numberone;
        this.numbertwo = numbertwo;
    }

    public static Integer getNumberTwo(int numberone) {
        return numbers.get(numberone);
    }
}