我正在使用EnumSet来执行按位权限操作,如有效Java第32项中所建议的那样。这很好,也很简洁,但我需要提取数字位值,以便与需要数字值的旧系统进行接口。使用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发布于 2018-10-19 10:46:41
首先,可以向枚举中添加一个返回其数值的方法:
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);
}https://stackoverflow.com/questions/52890707
复制相似问题