gpt4 book ai didi

java - 从 EnumSet 中检索数字位值

转载 作者:行者123 更新时间:2023-12-02 10:41:36 26 4
gpt4 key购买 nike

我正在使用 EnumSet 来执行按位权限操作,如《Effective Java》第 32 项中所建议的那样。这很好且简洁,但我需要提取数字位值,以便与需要数字的旧系统进行交互值(value)。使用 BitSet 这很简单,使用枚举序数值,但 EnumSet 似乎没有内置它。我只需要自己编写它吗?

public enum Permissions {
EDIT, // 1
SAVE, // 2
DELETE, // 4
WHATEVER // 8
};

EnumSet<Flags> flags = EnumSet.of(EDIT, DELETE);
// long numericVal = flags.getLong(); // should be 5, but doesn't exist

最佳答案

您可以首先向返回其数值的枚举添加一个方法:

public enum Permissions
{
EDIT, // 1
SAVE, // 2
DELETE, // 4
WHATEVER; // 8

public long getNumericValue()
{
return (1L << ordinal());
}

};

之后,循环遍历集合中的条目,对值求和。

public long getLong(EnumSet<Permissions> flags)
{
long result;
result = 0;
for (Permissions element: flags)
result += element.getNumericValue();
return (result);
}

关于java - 从 EnumSet 中检索数字位值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52890707/

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