首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从EnumSet检索数字位值

从EnumSet检索数字位值
EN

Stack Overflow用户
提问于 2018-10-19 10:39:07
回答 1查看 48关注 0票数 0

我正在使用EnumSet来执行按位权限操作,如有效Java第32项中所建议的那样。这很好,也很简洁,但我需要提取数字位值,以便与需要数字值的旧系统进行接口。使用BitSet --使用枚举序号值很简单,但是EnumSet似乎没有内置它。我只需要自己写吗?

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-19 10:46:41

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

代码语言:javascript
复制
public enum Permissions
{
  EDIT,     // 1
  SAVE,     // 2
  DELETE,   // 4
  WHATEVER; // 8

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

};

在此之后,循环检查集合中的条目,并对值进行求和。

代码语言:javascript
复制
public long getLong(EnumSet<Permissions> flags)
{
  long result;
  result = 0;
  for (Permissions element: flags)
    result += element.getNumericValue();
  return (result);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52890707

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档