检索枚举int值

时间:2014-01-24 20:47:32

标签: java enums

您如何看待枚举中是否存在这样的值:

public enum Color {

    Blue(1), Red(2), Black(3);

    private int value;

    private Color(int value) {
        this.value = value;
    }
}

如果你有一个int列表为[1, 3]

类似的东西:

boolean isBlue() {
    // check if value of Blue is in the list, return true
    // else false
}

5 个答案:

答案 0 :(得分:3)

为你的int值添加一个getter:

public int getIntValue() {
    return this.value;
}

然后检查值是否在整数列表中,您可以这样做:

final List<Integer> myList = ...
boolean isBlue = myList.contains(Color.Blue.getIntValue());

我不确定这是否真的是你所追求的,你的问题留下了解释的空间。尽管如此,使用任意值(如int)来引用枚举的成员并不是这样做的方法,连接到每个枚举值的额外int实际上没有增加任何价值。只需使用Color的列表代替:

final List<Color> myList = Arrays.asList(Color.Red, Color.Black, Color.Blue, Color.Red);
final boolean isBlue = myList.contains(Color.Blue);

然后它没有混淆的余地,值Color.Blue明确表示Color.Blue,而整数1可能表示自昨天起的天数,最小整数0,映射到Color,或任何其他具有相同结构的枚举,或其他东西。

答案 1 :(得分:1)

最简单的解决方案:

public enum Color {
  Blue(1),
  Red(2),
  Black(3);


  protected int value;

  private Color(int value) {
    this.value = value;
  }

  public Boolean IncludedIn(List<Integer> items) {
    return items.contains(value);
  }
}

然后只是:

Color.Blue.IncludedIn(list);

答案 2 :(得分:1)

您可以使用values()获取所有enum值的数组,然后提供ID,您就可以获得相应的元素。

        public int getIntValue() {
                return this.value;
        }

        public Color getColorById(int id){
            for(Color value : values()){
                if (value.getIntValue() == id){
                    return value;
                }
            }
            return null;
        }

答案 3 :(得分:0)

例如,您可以使用for循环迭代列表。对于每个值,您应该检查该值是否等于Color.BLUE。

答案 4 :(得分:0)

您可以在枚举中添加一个方法来检查发送的值是否与枚举中的值相同。 请参阅以下内容:

public enum Color {

    Blue(1), Red(2), Black(3);

    private int value;

    private Color(int value){
        this.value = value;
    }

    public boolean isCurrentColor(int value){
        return this.value == value;
    }
}

要使用它,您可以执行以下操作:

Color.Blue.isCurrentColor(1); // return True