EnumSet 'and' 手术
我正在移植一些使用 int enum 的旧代码模式到 Enum 和 EnumSet。 这很简单,但我不知道如何将以下代码转换为 EnumSet: :
int mask = (kind == 'C' ? CLASS_MODIFIERS
: kind == 'F' ? FIELD_MODIFIERS
: kind == 'M' ? METHOD_MODIFIERS
: (CLASS_MODIFIERS | FIELD_MODIFIERS | METHOD_MODIFIERS));
int bad_flags = flags & ~mask; // <--- this
flags &= mask; // <--- and this
~mask
就像输入 EnumSet.complementOf
一样简单,但我不知道如何做&。
I'm porting some old code that uses the int enum pattern to Enum and EnumSet. It is very easy but I don't know how translate the following code to EnumSet: :
int mask = (kind == 'C' ? CLASS_MODIFIERS
: kind == 'F' ? FIELD_MODIFIERS
: kind == 'M' ? METHOD_MODIFIERS
: (CLASS_MODIFIERS | FIELD_MODIFIERS | METHOD_MODIFIERS));
int bad_flags = flags & ~mask; // <--- this
flags &= mask; // <--- and this
~mask
is simple as typing EnumSet.complementOf
but I don't see how do &.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您想要使用
Set
方法 retainAll 来获取两个集合的交集:注意:我之前用以下行代替了更简单的
removeAll
。 Tom Hawtin 指出removeAll
更简单并且达到了相同的目的。 最初,我只是尽可能地复制OP的原始逻辑,而没有尝试优化。You want to use the
Set
method retainAll to get the intersection of two sets:Note: I previously had the following line in place of the simpler
removeAll
. Tom Hawtin pointed out thatremoveAll
is simpler and achieves the same end. Originally, I just copied the OP's original logic as closely as possible, without trying to optimize.CLASS_MODIFIERS
、FIELD_MODIFIERS
和METHOD_MODIFIERS
可能适合保留为常量,因为它们被用作 位掩码。 该链接可能有助于阐明此代码的要点。CLASS_MODIFIERS
,FIELD_MODIFIERS
, andMETHOD_MODIFIERS
might be appropriate to leave as constants, since they are being used as bit masks. The link might help to clarify the point of this code.