You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在EnumSet中高效切换枚举值(替代位运算XOR操作)

关于EnumSet实现flip方法的优化疑问

我正在重构原本使用底层位操作与掩码的代码,改用EnumSet实现以提升代码的可维护性与可读性,愿意牺牲少量效率(若存在)。已实现设置、取消状态的基础方法,还需实现切换枚举值状态的flip方法(存在则移除,不存在则添加)。当前flip方法通过先判断状态再设置的方式实现,考虑到EnumSet内部基于位掩码实现,想了解除底层位操作外,是否有更直接的切换方式,类似位运算XOR的一步操作。

相关代码示例

public class InputRestrictor {

    protected EnumSet<ForgeDirection> sideRestricted = EnumSet.noneOf(ForgeDirection.class);

    public void set(final ForgeDirection side, final boolean isInputOnly) {
        if (isInputOnly) sideRestricted.add(side);
        else sideRestricted.remove(side);
    }

    public boolean get(final ForgeDirection side) {
        return sideRestricted.contains(side);
    }

    public void flip(final ForgeDirection side) {
        set(side, !get(side));
    }
}

位运算示例

byte bits = 0b000111;
bits ^= (byte) 1 << 2; // 反转第2位:bits = 0b00011
bits ^= (byte) 0b111111; // 反转所有位:bits = 0b111100

内容的提问来源于stack exchange,提问作者Léa Gris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 02:52:02