【问题标题】:Is it possible to have an enum class with enums of two or more words?是否可以有一个包含两个或多个单词的枚举的枚举类?
【发布时间】:2012-03-15 01:57:21
【问题描述】:

我必须从几种类型的书籍中进行选择,并且我正在考虑为此使用枚举,但是有几种类型由两个或多个单词组成,例如“医学、健康与健身”、“艺术与摄影”、“科幻小说”等

public enum Genero {
    Action, Comedy, Drama, Computers, Novel, Science Fiction
}

但我收到“科幻小说”的语法错误。我尝试用双引号和简单的引号将它放在一起,但都没有奏效。此枚举将用作 Book 类的属性。

【问题讨论】:

    标签: java enums word


    【解决方案1】:

    不,这是不可能的。枚举名称必须是有效的 Java 标识符——也就是说,没有空格。通常的约定是在所有大写字符中声明枚举名称并使用下划线分隔单词,如下所示:

    public enum Genero {
        ACTION, COMEDY, DRAMA, COMPUTERS, NOVEL, SCIENCE_FICTION
    }
    

    【讨论】:

    • 由于emums是在内部处理的,我认为a just会使用下划线
    【解决方案2】:

    这是不可能的。但是,可以在名称中使用下划线 (Science_Fiction)。您还可以覆盖 toString 方法以返回您想要的任何内容(因为看起来您正在为您的枚举寻找一个人类可读的名称):

    public enum Genero {
        ACTION("Action"), COMEDY("Comedy"), DRAMA("Drama"), COMPUTERS("Computers"), NOVEL("Novel"), SCIENCE_FICTION("Science Fiction");
    
        private final String toString;
    
        private Genero(String toString) {
             this.toString = toString;
        }
    
        public String toString(){
             return toString;
        }
    }
    

    【讨论】:

    • @TomHawtin-tackline Whoopsies,现已修复。
    • 我只想为 Gender 属性的 Book 分配一个性别。喜欢:Gender = Genero.ACTION 我不知道在哪里可以使用构造函数或 toString 方法:S
    • @Aikanáro 您不必构造自己的枚举对象;它们是在类加载时制作的。如果这样做,包含对象的变量将全部大写并带有下划线(因为变量名不能有空格),但如果实际的枚举对象被转换为字符串,它们将具有标题大小写名称和空格。
    • 这是枚举中构造函数的一个很好的例子,但是由于它们是枚举,所以您绝对应该摆脱 setter。枚举中的所有字段都必须是固定值。但是,您可以保留 getter 以便其他类可以访问它。
    【解决方案3】:

    这可能是你想要的:

    static private enum EnumExample { 
      R("Sample emun with spaces"),  
      G("Science Fiction");  
      final private String value; 
      EnumExample(String s) { 
        value = s; 
      } 
    } 
    
    System.out.println(EnumExample.G.value); 
    System.out.println(EnumExample.valueOf("G").value); 
    
    Science Fiction 
    Science Fiction
    

    【讨论】:

    • 我会将该字段设为finalprivate
    • @TomHawtin-tackline 你的意思是“最终私有字符串值”还是?
    • 是的。目前你可以写EnumExample.G.value = "Comedy";
    • 我会让类 nom 静态,字段私有(也可以是 nom 静态),我会为这个字段创建一个 getter(但不是 setter)。
    猜你喜欢
    • 2015-08-21
    • 2017-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-17
    • 1970-01-01
    • 1970-01-01
    • 2010-09-11
    相关资源
    最近更新 更多