是否可以在 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/