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

时间:2010-11-27 08:24:47

标签: java

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

public enum AdminOpertionFirstlayer 
{MANAGE_SUPPLY,
 MANAGE_CUSTOMERS_SERVICE,
 ORDERS_MANAGEMENT,
 REPORTING_OPRATIONES}

我觉得很难把它们写给用户,因为我必须定义新的变量

*AdminOpertionFirstlayer []adminOpertionFirstlayerArr =
     AdminOpertionFirstlayer.values();

为了实现这个目标:

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];

但我觉得在*

上宣布是不好的做法
  1. 是否有最佳实践(枚举扩展为一个......)?
  2. 是否有可用的TryParse或每次解析时我都应该尝试捕捉?
  3. 谢谢

    修改

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

      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();
    }
    

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

     enumInstance.secondLayerMenu();
    

2 个答案:

答案 0 :(得分:5)

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

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

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

AdminOperatorFirstLayer chosen = 
    AdminOperatorFirstLayer.values()[(Integer.parseInt(dataIn.readLine()))];

或者您可以使用名称:

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

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

AdminOperatorFirstLayer chosen = 
    AdminOperatorFirstLayer.valueOf(dataIn.readLine()];

答案 1 :(得分:1)

Enum<E>类是Java中所有枚举的基础。

如果您希望用户阅读您的源代码,则无需使用值声明变量,使用增强的for循环将其打印出来。

通常,您希望打印出本地化的字符串,而不是源代码中枚举的名称。

没有等效于TryParse,而是使用AdminOpertionFirstlayer.valueOf(AdminOpertionFirstlayer.class, string)并捕获IllegalArgumentException。