如何在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
相关产品推荐
相关产品推荐

