Так само, коли ви визначаєте ім'я таблиці в базі даних або клас на Java, ви використовуєте сингулярне значення для перерахунків, це також найкращий варіант. Подивіться, як ви збираєтесь ним користуватися.
Напишемо приклад:
public enum Day {
SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY
}
class Appointment {
private Day day;
public void setDay(Day day) {
this.day = day;
}
}
У формі однини ви чітко бачите атрибут наміру дня. "день" - це день тижня, який буде проведено. Інакше підпис методу був би встановленийDay (Days day), і напевно багато людей будуть задаватися питанням, чи може призначення відбутися за один день.
Якщо ви працюєте в компанії, у неї 48 годинних змін, ви можете спробувати визначити щось на кшталт:
public enum Days {
MONDAY_TUESDAY, WEDNESDAY_THURSDAY, FRIDAY_SATURDAY
}
Таким чином ви могли б встановити дні, коли збираєтесь працювати. Але все одно це буде виглядати дивно, і є кращий варіант і використовувати форму однини:
public enum Shift {
MONDAY_TUESDAY, WEDNESDAY_THURSDAY, FRIDAY_SATURDAY
}
Тепер ви дійсно показуєте значення перерахунку. Зазвичай у будь-якому домені ви виявите, що використання однини для перерахунку є найкращим варіантом, оскільки кожна константа в enum - це лише один елемент.
Ви також згадуєте .NET. Перерахування "прапорів" у .NET просто означає, що коли ви очікуєте, що enum як параметр, ви дійсно отримаєте перелік елементів цього enum (зберігається як ціле число).
// Define an Enum with FlagsAttribute.
[FlagsAttribute]
enum MultiHue : short
{
Black = 0,
Red = 1,
Green = 2,
Blue = 4
};
public void setMultiHue(MultiHue hues);
Ви можете зробити те ж саме в Java, але перелік все ще буде єдиним:
public enum Hue {
BLACK, RED, GREEN, BLUE;
private final Integer hue;
Hue() {
this.hue = 1 << this.ordinal();
}
public Integer toFlag() {
return this.hue;
}
}
public class MultiHue {
private Integer hues = 0;
public void addHue(Hue hue) {
this.hues |= hue.toFlag();
}
public boolean hasHue(Hue hue) {
return (this.hues & hue.toFlag()) != 0;
}
}
Простіше і зрозуміліше (хоча для цього використовується більше пам’яті) зробити це з Java - це просто використовувати Список.