【问题标题】:Java Enum: Take Multiple Values at a TimeJava 枚举:一次取多个值
【发布时间】:2026-02-24 04:30:01
【问题描述】:

如果我错了,请纠正我:

  1. 枚举是一种类型
  2. 某个枚举类型的对象一次可以取 1 个且只能取 1 个枚举值

现在我有一个问题: 假设我在我的 java 程序中的某个地方定义了一个枚举(或其他适合该任务的数据结构;我无法命名,因为我正在寻找这样的数据结构来完成以下任务)。如果不知何故,我在 main(String []) 中有一个枚举(或其他数据结构)对象,并且我希望它采用枚举的多个值(或其他数据结构),我该怎么做?如果不是枚举,我应该使用什么合适的数据结构?

提前致谢!

【问题讨论】:

    标签: java enums multiple-value


    【解决方案1】:

    你可以使用一个简单的数组,任何来自核心 java.util API 的集合也可以完成这项工作(比如列表或集合,它比使用数组更方便一点),但你所追求的可能是 EnumSet

    enum Monster {
        GOBLIN, ORC, OGRE;
    }
    
    public class Main {
        public static void main(final String[] args) {
            final EnumSet<Monster> bigGuys = EnumSet.of(Monster.ORC, Monster.OGRE);
    
            for (final Monster act : Monster.values()) {
                System.out.println(bigGuys.contains(act));
            }
        }
    }
    

    【讨论】:

    • 是的——EnumSet 的优点是它具有内置的优化功能,例如一组低值枚举被实现为位掩码。
    • 是的,正是我要找的!感谢您的代码段。
    【解决方案2】:

    听起来您正在寻找:

    • java.util.EnumSet
    • 可变参数:method(MyEnum ...values)
    • 一个简单的数组:MyEnum[]

    我自己通常更喜欢java.util.EnumSet,它易于使用并且可以快速检查它是否包含某个值等。它也可以替代or of flags。

    【讨论】:

    • 感谢 Pulsar 提供这么多候选人!