设置特定[负]位的java枚举的好方法是什么

bgtovc5b  于 2021-07-03  发布在  Java
关注(0)|答案(0)|浏览(260)

这个问题是从超级用户迁移过来的,因为它可以在堆栈溢出时得到回答。24天前迁移的。
我必须返回一个值,我想在java中表示为一组枚举,我可以或一起返回,其中一些值是“警告”,应该是正值,另一半是“错误”,应该是负值,以便收件人可以检查<0并说发生了错误,但是,使用单个位输出一系列消息,指示所发现问题的类型(按严重性排序)。如下所示:

public enum ErrorCode {
OK(0),
// Hard errors, (some code not run at all)
PARSE_ERROR(0xC000), // 1100 0000 0000 0000
NOT_IMPLEMENTED(0xB0000), // 1010 0000 0000 0000
// Soft errors, suspicious behavior (action mocked but not performed)
UNINITIALIZED_VARIABLE(0x0001), // 0000 0000 0000 0001
ACCESS_WEB(0x0002), // 0000 0000 0000 0010
START_PROCESS(0x0004), // 0000 0000 0000 0100
WRITE_TO_DISK(0x0008), // 0000 0000 0000 1000
WRITE_TO_REGISTRY(0x0010); // 0000 0000 0001 0000

private Integer exitCode;
public Integer getExitCode() { return exitCode; }
private ExitCode(Integer exitCode) { this.exitCode = exitCode; }
}

但是,我想知道是否有比显式使用十六进制值更好的方法。有些东西是我可以得到代码来“计算”这些值。例如

PARSE_ERROR(1<<31 | 1<<30),
NOT_IMPLEMENTED(1<<31 | 1<<29),
UNINITIALIZED_VARIABLE(1<<0),
ACCESS_WEB(1<<1),

优点是如果接收者认为某个错误应该是硬错误而不是软错误,我只需添加 1<<31 | 价值观。还有一个小小的优点,就是列出了不同的位(0..30)。但缺点是结果不明显。
或者在java中有一个固定长度的bitset类具有我不知道的功能。
我想在如下代码中使用它们:

public class ExitCode {
  private Integer exitCode = 0;

  public void setExitCode(ErrorCode errorCode) {
    exitCode |= errorCode.getExitCode();
  }

  public exit() { // for end of main()
     System.exit(exitCode);
  }
}

因此,当我的程序累积状态信息(枚举)时,会有一个摘要值报告给命令行(以及.json文件中的详细信息)。这就是我的委托人想要的。代码比这稍微复杂一些,但这是我重点关注的使其可维护的部分。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题