2010-11-27 114 views
1

嗨我知道Java很长一段时间,最近我一直深入Java世界。作为一名经验丰富的c#开发人员,我发现使用Java enum's很奇怪。 例如,如果我显示在控制台的项目,如:什么是Java最佳实践来处理枚举的

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

我很难把它们写下来给用户,因为我必须为了实现这一定义新varible

*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可用或每次我解析我应该尝试和赶上?

谢谢

编辑

不这样做是可以理解和可读性?

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(); 
+1

不要以变量名的大写字母开头。这是令人困惑的,因为以大写字母开头的名字通常是类名。请参见[Java编程语言的代码约定](http://www.oracle.com/technetwork/java/codeconv-138413.html)。 – Progman 2010-11-27 08:56:39

回答

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()]; 
+0

我该如何解析它?这是无法解决的... 和我不存在在这种情况下.. – 2010-11-27 08:41:27

+0

没有必要downvote他的答案!对他有什么影响? – trojanfoe 2010-11-27 08:52:58

1

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

不需要用值声明变量,如果希望用户阅读源代码,可以使用增强型for循环将其打印出来。

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

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