包含空格的枚举值

时间:2019-05-05 16:54:08

标签: java enums

enum Commands
{
    ADDPLAYER, REMOVEPLAYER, EDITPLAYER, RESETSTATS,
    DISPLAYPLAYER, RANKINGS, STARTGAME, EXIT
};

所以我有以下游戏命令。现在,我需要介绍命令“ rankings asc”和“ rankings desc”,即以升序或降序指定排名,而不仅仅是排名。我不确定该怎么做。我试图将“ RANKINGS ASC” / DESC添加到枚举“命令”列表中,但由于空间原因而无法正常工作。在程序中调用命令时,该命令需要在两个术语之间有一个空格,确切地称为“ rankings asc”。其他命令将正常使用(按情况使用)。有任何想法吗?排名命令可以包含参数吗?

3 个答案:

答案 0 :(得分:1)

作为@davidxxx答案的另一种选择,如果您希望客户端代码不必处理枚举名称及其字符串表示形式之间的转换,则可以将代码移到枚举类型内部:

  "2019-06-20": {
    "marked": true,
    "selected": true,
  },
  "2019-06-28": {
    "marked": true,
    "selected": true,
  },
}


delete a["2019-06-20"]

答案 1 :(得分:-1)

枚举名称中不能包含空格。但是您可以向枚举添加参数:

enum Commands
{
    ADDPLAYER("addplayer"), REMOVEPLAYER("removeplayer"), RANKINGS_ASC("rankings asc"), RANKINGS_DESC("rankings desc")

    private String name;

    Commands(String name){
        this.name = name;
    }

    public String getName(){
        return this.name;
    }
};

答案 2 :(得分:-1)

用常量名称分隔单词的方法不是空格:,对于标识符无效,但下划线:_,即:

RANKINGS_ASC, RANKINGS_DESC  

这适用于枚举值,例如final static字段常量名称。

  

该命令在调用时需要在两个术语之间有一个空格   在程序中,完全称为“ ranks asc”。

枚举值是编译类型常量值。这些表示枚举的逻辑名称,而并非旨在表示应用程序的客户端输入的确切文本值。在某些情况下,它们可能会但在其他情况下可能不会,并且可以接受。
为了满足您的要求,您可以使用参数构造函数定义一个枚举,其中参数代表客户端输入的文本命令。
但是现在,如果这两种情况都需要一个映射,只需用下划线替换空白,然后使用Enum.valueOf(String)来获取枚举,例如:

Command command = Commands.valueOf(clientCommand.replace(" ", "_"))

请注意,您可以按Babyburger(miam)的说明为emum构造函数添加一个参数,但是只有当该参数对每个枚举值有意义时才有意义,因为您想统一地对其进行操作。如果不是这种情况,则可能不应该使用这种方式。