java - 每个枚举项的编号?

标签 java integer enums bit-manipulation

是否可以在 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.B,则 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;
    }
}

关于java - 每个枚举项的编号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3360283/

相关文章:

java - 在java中更新ENUM的值

java - 如何在 Seekbar 上放置箭头作为选择器

c - 在 C 中定义 16 位整数

algorithm - 整数分解中素数的计数

java - 我应该测试枚举吗?

java - 从 Jruby 中的 Jar 文件访问枚举

java - Jenkins 和 JIRA Cloud 之间的集成

Java KeyListener 是延迟注册

java - JSONObject 返回空 :false

java - Java中是否有默认的数字类型