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

每个枚举项的编号?

胡博艺
2023-03-14
问题内容

是否可以在Java中定义类似的内容?

C#代码

public enum Character
{
    A = 1,

    B = 2,

    C = 4,

    D = 8

}


...

Character ch = /* from user */

if(ch & Character.A)
{
    // some operation...
}

例如,如果ch设置为Character.Bthen,结果if将为false

ch = 00000000 00000000 00000000 00000010
A  = 00000000 00000000 00000000 00000001
------------------------------------------
&    00000000 00000000 00000000 00000000

我想实现类似的东西!Java有可能吗?


问题答案:

好吧,您 几乎 可以做到:

public enum CharEnum // Let's avoid java.lang.* clashes
{
    A(1), B(2), C(4), D(8);

    private final int mask;

    private CharEnum(int mask)
    {
        this.mask = mask;
    }

    public int getMask()
    {
        return mask;
    }
}

然后:

CharEnum ch = /* from user */

if ((ch.getMask() & CharEnum.A.getMask()) > 0)
{
    // some operation...
}

在某些情况下,这可能很有用,但是正如Michael所说,您绝对应该考虑EnumSet一般的“值集”选项。

如果 确实 决定使用带值的枚举,则可以在枚举本身内放入额外的逻辑:

public enum CharEnum
{
    // Other code as before

    public boolean overlapsWith(CharEnum ch)
    {
        return (ch.mask & mask) > 0;
    }
}


 类似资料:
  • 问题内容: 假设我有一个返回sth的查询。像这样: 是否可以添加另一列来枚举每个组中的行(即,枚举具有其他角色的经理,工人和人员,而不考虑其他角色)?像这样: 使用Oracle扩展很好。 问题答案: 使用窗口功能:

  • 问题内容: 从另一个问题中,我了解到在Java中 可以为Enum的每个实例定义特定的方法 : 让我感到惊讶的是,这甚至是可能的,每个实例专用的“专有方法”是否都有 名称 来查找文档? 另外, 应该如何使用 ?由于下一个未编译: 我应该如何使用这些“专有”方法? 问题答案: 您不能引用这些方法,因为您正在有效地为每个枚举创建匿名(*)类。由于它是匿名的,因此只能从匿名类本身内部或通过反射引用此类方法

  • 我想知道如何创建一个循环,为枚举的每个项重复,并仍然验证我在正确的枚举(索引)中 这段代码只是我想做的一个示例,对每种类型的枚举重复循环,然后验证我是否在第一个、第二个枚举中,等等,然后打印当前枚举

  • 问题内容: 这不是卡住我的问题,而是我正在寻找一种编写代码的整洁方法。 本质上,我正在编写一个事件驱动的应用程序。用户触发一个事件,该事件被发送到适当的对象,然后这些对象处理事件。现在,我正在编写偶数处理程序方法,并且希望使用switch语句确定如何处理事件。现在,在我研究通用结构时,事件类非常简单: 然后,在另一堂课中,我会看到类似以下内容的内容: 我会 喜欢 做的就是这样的事情(尽管我当然会坚

  • 问题内容: 我有几个需要国际化的枚举(我需要将枚举值转换为某些语言才能在jsf页面中显示)。考试列举: 翻译将是例如/ 转换应存储在MessageBundle(属性文件)中。我正在寻找一个简单,通用的解决方案(最好是无需在所有枚举中编写额外的代码),而该解决方案在jsf方面并不需要太多。仅提及它,当然,两个不同的枚举可能具有相同的枚举值(例如,类似的值在不同的枚举中具有不同的含义)。 我想出的解决

  • 我正在使用Swagger/OpenAPI V3注释创建应用程序的API描述,这些注释从以下依赖项导入: