2010-11-27 73 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。