2014-09-12 160 views
0

我是新來的學生學習的Java基礎知識及其Java的枚舉:一個內有多個字符串枚舉

我的目標是創建一個包含各種類別,如電子郵件,用戶名,密碼,MaterialType一個枚舉等 而且我想那一個範疇之內我可以聲明不同字符串和我的示例代碼如下:

public enum MyEnums { 
    Usernames 
    { 
     public String toString() 
     { 
      return "This is a GmailUsername"; 
     } 
     /*public String toString() 
     { 
      return "This is a GalleryComment"; 
     }*/ 
    }, 
    Password 
    { 
     public String toString() 
     { 
      return "This is a public password"; 
     } 
    /* public String GmailPassword() 
     { 
      return "This is a Gmail Password"; 
     } */ 

    }, 
    Emails 
    { 
     public String toString() 
     { 
      return "This is a public contact email address"; 
     } 
     /* public String EmailAccount() 
     { 
      return "This is a public Email Account address"; 
     } */ 

    }, 
    PhoneNumbers 
    { 
     public String toString() 
     { 
     return "This is Phonenumber"; 
     } 
     /* public String Phone() 
     { 
      return "This is a phone number"; 
     }*/ 
     } 
    } 

和我所說的代碼

public static void main (String args[]) 
    { 

     System.out.println(MyEnums.Emails); 
     System.out.println(MyEnums.Usernames); 
     System.out.println(MyEnums.PhoneNumbers); 
     System.out.println(MyEnums.Password); 

    } 

我的問題是爲什麼在使用第二個字符串類型函數時它給出了錯誤,例如在GmailPassword()的密碼類別中爲什麼它不起作用。

是否有任何其他的方式來聲明枚舉多個字符串類別明智地喜歡

public Enum myEnum{ 
Category1 
{ 
"String 1","String2",......."String N" 
} 
....... 
....... 
....... 
....... 
CategoryN 
{ 
"String 1","String2",......."String N" 
} 
+0

我想你應該創建一個字符串的通用接口和實施,對於每一個枚舉值。 – 2014-09-12 11:38:33

+0

您正在爲每個'enum'常量創建私有的匿名內部類。只有基類「MyEnum」中聲明的方法可以從外部訪問。 – Holger 2014-09-12 11:52:05

+0

@Holger爵士請驗證公共枚舉MyEnum { 公共字符串類別1(字符串或多個) { 開關(S) 情況下的 '刪除': 「這是一個字符串1」; 情況下,「更新」: 「這是一個更新」 案「錯誤」: 「你有驗證錯誤」 }} 和 可以通過 調用一個String =「刪除」 的System.out.println(MyEnum .Category1(S)); – 2014-09-12 12:03:03

回答

3

也許這有幫助嗎?

public enum MyEnum { 
    Emails("mail1", "mail2", "mail3"), 
    Usernames("username1", "username2"), 
    CategoryN("a", "b", "c"); 

    private String[] strings; 

    private MyEnum(String... strings) { 
     this.strings = strings; 
    } 

    @Override 
    public String toString() { 
     return Arrays.toString(strings); 
    } 

    public String getString(int index) { 
     return strings[index]; 
    } 

} 

主要

public static void main(String[] args) { 
     System.out.println(MyEnum.Emails); //[mail1, mail2, mail3] 

     System.out.println(MyEnum.Emails.getString(1)); //mail2 
    } 
+1

+1好方法。但是不應該將字符串屬性公開爲最終的,還是提供訪問者? – 2014-09-12 11:44:05

+0

@Pierre Henry:不,這不是必需的,但可能會有所幫助。但是你仍然需要記住可以修改'strings'數組的內容。 – Arek 2014-09-12 12:34:47

+0

如何在主函數中調用它我使用System.out.println(MyEnum.Emails)調用它; \t \t System.out.println(MyEnum.Usernames);但沒有得到單個字符串,而是獲得整個枚舉。 – 2014-09-12 12:49:18

1

您可以創建對象,而不是隻是字符串枚舉。這樣你就可以以乾淨的方式訪問這些對象的所有屬性。

+0

先生,我是新來編碼,所以這將是你的偉大,如果你將編程插圖謝謝 – 2014-09-12 11:45:51

1

在我看來,而不是與類別的枚舉,你應該有一個接口,你讓每個類別枚舉實現。這樣你有N個枚舉,每個實現類別接口,並在每個你有字符串作爲枚舉常量。

+0

請給我一個你的方法的編碼說明。 – 2014-09-12 11:43:48