gpt4 book ai didi

java - EnumSet 'and' 操作

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:29:50 25 4
gpt4 key购买 nike

我正在移植一些使用 int enum pattern 的旧代码枚举和枚举集。这很容易,但我不知道如何将以下代码翻译成 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 一样简单,但我不知道如何执行 &

最佳答案

您想使用Set 方法retainAll获取两组的交集:

public class Test {
public enum Kind { CLASS, FIELD, METHOD }

public void applyMask(char kind, EnumSet<Kind> flags) {
final EnumSet<Kind> mask;
switch (kind) {
case 'C': mask = EnumSet.of(Kind.CLASS); break;
case 'F': mask = EnumSet.of(Kind.FIELD); break;
case 'M': mask = EnumSet.of(Kind.METHOD); break;
default: mask = EnumSet.allOf(Kind.class); break;
}
EnumSet<Kind> badFlags = EnumSet.copyOf(flags);
badFlags.removeAll(mask); // See note below
flags.retainAll(mask);
}
}

注意:我以前使用以下行来代替更简单的 removeAll。 Tom Hawtin 指出 removeAll 更简单并且达到相同的目的。最初,我只是尽可能地复制了 OP 的原始逻辑,并没有尝试优化。

    badFlags.retainAll(EnumSet.complementOf(mask));

关于java - EnumSet 'and' 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/902025/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com