如何获取枚举值的附加属性?

Vit*_*aly 2 java enums

在我的聊天应用程序中,我有一个枚举:

enum ContactRelationType {
  Friend,
  Familiar,
  Ignored,
  Unknown,  
  Guild,
  Officers,
  Academy,
  Community,
  System
}
Run Code Online (Sandbox Code Playgroud)

ContactRelationType值的一半是房间(公会,官员,学院,社区,系统).我需要知道的是价值空间与否.

我知道三种方法:

首先:

enum ContactRelationType {
  Friend,
  Familiar,
  Ignored,
  Unknown,  
  Guild,
  Officers,
  Academy,
  Community,
  System;

    public boolean isRoom() {
    return this == Guild ||
        this == Officers ||
        this == Academy ||
        this == Community ||
        this == System;
  }
}
Run Code Online (Sandbox Code Playgroud)

它看起来很难看,IDEA告诉我"过于复杂的布尔表达式",它就是.

第二:

    enum ContactRelationType {
      Friend,
      Familiar,
      Ignored,
      Unknown,  
      Guild,
      Officers,
      Academy,
      Community,
      System;

    public boolean isRoom() {
      switch (this) {
        case Guild:
        case Officers:
        case Academy:
        case Community:
        case System:
          return true;
        default:
          return false;
    }
}
Run Code Online (Sandbox Code Playgroud)

它看起来也很难看.

第三:

    public enum ContactRelationType {
      Friend(false),
      Familiar(false),
      Ignored(false),
      Unknown(false),
      Guild(true),
      Officers(true),
      Academy(true),
      Community(true),
      System(true);

      private boolean room;

      ContactRelationType(boolean room) {
        this.room = room;
      }

      public boolean isRoom() {
        return room;
      }
}
Run Code Online (Sandbox Code Playgroud)

但在这种情况下,我有boolean room所有枚举实例.

那么,什么解决方案更好,为什么?

Ale*_*exR 5

您使用布尔标志的解决方案是好的.只需添加一个默认构造函数:

 ContactRelationType() {
    this(false);
  }
Run Code Online (Sandbox Code Playgroud)

现在你不必写truefalse为每个枚举成员; 仅适用于那些不是"默认"的:

public enum ContactRelationType {
  Friend,
  Familiar,
  Ignored,
  Unknown,
  Guild(true),
  Officers(true),
  Academy(true),
  Community(true),
  System(true);
Run Code Online (Sandbox Code Playgroud)