An enum
- это особый тип класса. Запишите это как отдельный класс. Это облегчает поддержку, чтение и анализ остальной части вашей программы. Поскольку элементы в перечислении являются константами, используйте все имена в верхнем регистре для максимальной читабельности.
public enum Day {
SUNDAY,
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY;
};
Теперь, когда у вас есть класс, вы хотите добавить функцию, однодневное представление дня. Вы делаете это для класса, добавляя атрибут. Enums
являются как константами, так и классами, поэтому мы добавим представление "однобуквенное" в enum
, используя его классоподобные функции.
public enum Day {
SUNDAY,
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY;
private String shortName;
public String getShortName() {
return shortName;
}
};
Но как мы можем установить это shortName
? Ответ в том, что, поскольку enum
является классом, мы используем конструктор. enum
конструкторы существуют, но они ограничены. Они должны быть private
, чтобы предотвратить создание новых экземпляров (особенность перечислений).
public enum Day {
SUNDAY,
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY;
private String shortName;
private Day(String abbreviation) {
shortName = abbreviation;
}
public String getShortName() {
return shortName;
}
};
Что приводит к последнему вопросу, как мы объявляем значение, передаваемое в конструктор. Ну, вы делаете это, когда объявляете статическое значение, например
public enum Day {
SUNDAY("S"),
MONDAY("M"),
TUESDAY("T"),
WEDNESDAY("W"),
THURSDAY("R"),
FRIDAY("F"),
SATURDAY("Y");
private String shortName;
private Day(String abbreviation) {
shortName = abbreviation;
}
public String getShortName() {
return shortName;
}
};
Это помещает «однобуквенное» представление в то, что оно представляет, обеспечивая хорошую локализацию кода и простоту обслуживания.
Чтобы использовать это в вашем коде
if ( day == Day.MONDAY ) { // Typical enum comparison
System.out.println(day.getShortName()); // prints the day's short name
При изучении Java сложно начать с хорошей объектной ориентации. По сути, ваш вопрос был «как мне добавить что-нибудь в перечисление», но поскольку вы использовали ваше перечисление, встроенное в другой класс, оно решалось не в том классе. Вы начали программировать «как я могу сделать так, чтобы этот класс дал мне правильный ответ для этого перечисления». Не программируйте таким образом, если вы можете избежать этого. Вместо этого напишите свой код так, чтобы «другой объект» дал вам ответ.
enum
в Java - это порт идеи на другом языке. Java отлично поработала и над тем, чтобы enum
выглядел как перечисление C, и заставлял его вести себя как интегрированный компонент языка Java. Тем не менее, люди изначально подвергаются синтаксису перечисления C, что означает, что они сталкиваются с проблемами обслуживания перечисления C. Итак, ваш подход понятен для человека, изучающего Java и перечисления Java. Тем не менее, использование enum
в качестве объекта сделает ваш код быстрее, проще для чтения и легче рассуждать. Теперь, когда вы увидели другой подход, используйте его, когда это уместно.