当前位置: 首页 > 面试题库 >

获取与int值关联的枚举

皇甫礼骞
2023-03-14
问题内容

以前,我将LegNo枚举定义为:

NO_LEG, LEG_ONE, LEG_TWO

通过调用return LegNo.values()[i];,我可以获得与每个枚举关联的值。

但是现在我决定让LegNo枚举NO_LEG是int -1而不是0,所以我决定使用私有构造函数进行初始化并设置其int值

NO_LEG(-1), LEG_ONE(1), LEG_TWO(2);

private LegNo(final int leg) { legNo = leg; }

现在唯一的事情就是因为我这样做,所以该values()方法不适用于NO_LEG枚举。我如何获得与int相关联的枚举?除了使用case
switch语句或if-elseif-elseif之外,还有其他有效的方法吗?

我可以看到很多与从枚举获取int值有关的SO问题,但我反其道而行之。


问题答案:

编辑2018年8月

今天,我将如下实现

public enum LegNo {
    NO_LEG(-1), LEG_ONE(1), LEG_TWO(2);

    private final int value;

    LegNo(int value) {
        this.value = value;
    }

    public static Optional<LegNo> valueOf(int value) {
        return Arrays.stream(values())
            .filter(legNo -> legNo.value == value)
            .findFirst();
    }
}

您必须在枚举内维护一个映射。

public enum LegNo {
    NO_LEG(-1), LEG_ONE(1), LEG_TWO(2);

    private int legNo;

    private static Map<Integer, LegNo> map = new HashMap<Integer, LegNo>();

    static {
        for (LegNo legEnum : LegNo.values()) {
            map.put(legEnum.legNo, legEnum);
        }
    }

    private LegNo(final int leg) { legNo = leg; }

    public static LegNo valueOf(int legNo) {
        return map.get(legNo);
    }
}

静态块将仅被调用一次,因此此处实际上没有性能问题。

编辑:将方法重命名valueOf为与其他Java类更加内联。



 类似资料:
  • 以前,我将LegNo枚举简单定义为: 通过调用,我能够获得与每个枚举关联的值。 现在唯一的问题是,因为我是这样做的,方法将不能用于枚举。如何获得与int关联的枚举?除了使用case switch语句或if-elseif-elseif之外,是否还有其他有效的方法来完成此操作 我可以看到很多关于从枚举中获得int值的问题,但我想要的是相反的问题。

  • 本文向大家介绍Java获取枚举的值,包括了Java获取枚举的值的使用技巧和注意事项,需要的朋友参考一下 示例 每个枚举类都包含一个名为的隐式静态方法values()。此方法返回一个包含该枚举的所有值的数组。您可以使用此方法遍历值。重要的是要注意,此方法每次调用时都会返回一个新数组。 如果需要,Set也可以使用EnumSet.allOf(Day.class)。

  • 根据这篇文章,我正在尝试反序列化与JooQ的一对多关联(没有代码生成)。 这是我的目标课程。 我的JooQ查询如下: 方法无法按预期工作。生成的SQL语句如下所示: 翻译后的postgres查询没有正确替换的key属性,这会导致SQL异常。 PS:我正在使用JooQ 3.14.0和postgres 11.5

  • 但我的代码不起作用,它说类型没有定义:

  • 假设我有这样的枚举 我也有一个类,我想扩展有序[SimpleEnum] 所以在SimpleClass中,我只需要获取附加到相应SimpleEnum val的值。 在java中,我能够声明一个变量的枚举和访问一个实际的值对应于它的这个var,在scala我正在寻找一种方法来获取枚举的实例,并接触到它的值。

  • 本文向大家介绍orm获取关联表里的属性值,包括了orm获取关联表里的属性值的使用技巧和注意事项,需要的朋友参考一下 ORM——关系对象模型 对象关系映射(英语:Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。从效果上说,它其实是创建了一个可在编程语言里使用的“虚拟对象数据