2014-09-12 203 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