什么是Java最佳实践来处理枚举

yoa*_*str 1 java

嗨,我认识Java很长一段时间,最近我一直深入Java世界.作为一名经验丰富的c#开发人员,我觉得使用Java枚举很奇怪.例如,如果我在控制台项目上显示如下:

public enum AdminOpertionFirstlayer 
{MANAGE_SUPPLY,
 MANAGE_CUSTOMERS_SERVICE,
 ORDERS_MANAGEMENT,
 REPORTING_OPRATIONES}
Run Code Online (Sandbox Code Playgroud)

我发现很难将它们写给用户,因为我必须定义新的变量

*AdminOpertionFirstlayer []adminOpertionFirstlayerArr =
     AdminOpertionFirstlayer.values();
Run Code Online (Sandbox Code Playgroud)

为了实现这个目标:

for (int i = 0; i < adminOpertionFirstlayerArr.length; i++) {
    String s = String.format("%d. %s",
                             i+1,
                             adminOpertionFirstlayerArr[i].toString());
    Screen.print(s);
}

AdminOpertionFirstlayer chosen= adminOpertionFirstlayerArr 
                                [(Integer.parseInt(dataIn.readLine()))-1];
Run Code Online (Sandbox Code Playgroud)

但我觉得申报*是不好的做法

  1. 有最佳实践(枚举扩展是一个...)?
  2. 是否有TryParse可用或每次解析时我应该尝试捕获?

谢谢

编辑

这样做是可以理解和可读吗?

  public enum MainMenuOptiones{

    ADMIN {public void secondLayerMenu(){
      Main.AdminSecondLayerMenu();}},

    CUSTOMER{public void secondLayerMenu(){
       Main.customerSecondLayerMenu();}},

    EXIT{public void secondLayerMenu(){
        System.exit(1);}},

    UNAPPLICABLE{public void secondLayerMenu(){
        Screen.printToScreen("chice doesnt exist  try again");}};

    abstract public void secondLayerMenu();
}
Run Code Online (Sandbox Code Playgroud)

phrphes而不是使用我可以使用的所有开关机制

 enumInstance.secondLayerMenu();
Run Code Online (Sandbox Code Playgroud)

Mic*_*ker 5

您可以使用Java的增强型for循环(以及枚举的序数值)

for (AdminOperatorFirstLayer operator : AdminOperatorFirstLayer.values()) {
    String s = String.format("%d. %s", operator.ordinal(), operator);
    Screen.print(s);
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用序数值重新创建枚举:

AdminOperatorFirstLayer chosen = 
    AdminOperatorFirstLayer.values()[(Integer.parseInt(dataIn.readLine()))];
Run Code Online (Sandbox Code Playgroud)

或者你可以使用这个名字:

for (AdminOperatorFirstLayer operator : AdminOperatorFirstLayer.values()) {
    String s = String.format("%s. %s", operator.name(), operator);
    Screen.print(s);
}
Run Code Online (Sandbox Code Playgroud)

然后你可以使用valueOf值来重新创建枚举:

AdminOperatorFirstLayer chosen = 
    AdminOperatorFirstLayer.valueOf(dataIn.readLine()];
Run Code Online (Sandbox Code Playgroud)