Точно так же, когда вы определяете имя таблицы в базе данных или класс в Java, вы используете единственное число для перечислений, это также лучший вариант. Просто посмотрите, как вы собираетесь его использовать.
Давайте напишем пример:
public enum Day {
SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY
}
class Appointment {
private Day day;
public void setDay(Day day) {
this.day = day;
}
}
В единственном числе вы ясно видите намерение атрибута дня. «день» - день недели, когда назначено это назначение. В противном случае подпись метода была бы setDay (дни дня), и наверняка многие люди будут интересоваться, может ли встреча произойти более чем за один день.
Если вы работаете в компании с 48-часовыми сменами, вы можете попытаться определить что-то вроде:
public enum Days {
MONDAY_TUESDAY, WEDNESDAY_THURSDAY, FRIDAY_SATURDAY
}
Таким образом, вы можете установить дни, когда вы собираетесь работать. Но, тем не менее, это будет выглядеть странно, и есть лучший вариант - использовать единственную форму:
public enum Shift {
MONDAY_TUESDAY, WEDNESDAY_THURSDAY, FRIDAY_SATURDAY
}
Теперь вы действительно показываете значение перечисления. Обычно в любой области вы обнаружите, что использование единственного числа для перечисления является наилучшим вариантом, поскольку каждая константа в перечислении - это всего лишь один элемент.
Вы также упоминаете .NET. Перечисление «flags» в .NET просто означает, что когда вы ожидаете, что 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 - просто использовать List.