Возможно ли иметь класс enum с перечислениями из двух или более слов? - PullRequest
8 голосов
/ 15 марта 2012

Мне нужно выбрать из нескольких типов жанров для книг, и я подумывал использовать для этого перечисления, но есть несколько жанров, составленных из двух или более слов, таких как «Медицина, здоровье и фитнес», «Искусство и фотография», « Фантастика "и др.

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

Но я получил синтаксическую ошибку для "Научной фантастики". Я пытался поместить это с двойными кавычками и простыми квотами, но ни один не работал. Это перечисление будет использоваться в качестве атрибута для класса Book.

Ответы [ 3 ]

16 голосов
/ 15 марта 2012

Нет, это невозможно.Имена перечислений должны быть действительными идентификаторами Java - это означает, что пробелы отсутствуют.Обычное соглашение состоит в том, чтобы объявлять имена перечислений во всех заглавных буквах и в отдельных словах, используя подчеркивание, например:

public enum Genero {
    ACTION, COMEDY, DRAMA, COMPUTERS, NOVEL, SCIENCE_FICTION
}
5 голосов
/ 15 марта 2012

Это невозможно.Однако в названии можно использовать подчеркивание (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;
    }
}
0 голосов
/ 15 марта 2012

Это может быть то, что вы хотите:

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
...