在Java中枚举的命名:单数还是复数?
2022-08-31 05:53:24
是否有关于如何命名Java枚举的“官方”建议?
enum Protocol { HTTP, HTTPS, FTP }
或
enum Protocols { HTTP, HTTPS, FTP }
我知道在.Net世界中,建议使用单数,除了表示位标志的枚举。只是好奇Java中是否有类似的东西。
一个似乎特定于 .Net 的相关问题:枚举的单数还是复数?
是否有关于如何命名Java枚举的“官方”建议?
enum Protocol { HTTP, HTTPS, FTP }
或
enum Protocols { HTTP, HTTPS, FTP }
我知道在.Net世界中,建议使用单数,除了表示位标志的枚举。只是好奇Java中是否有类似的东西。
一个似乎特定于 .Net 的相关问题:枚举的单数还是复数?
Java中的枚举(可能还有一般的枚举)应该是单数的。我们的想法是,您不是在选择多个协议,而是在值列表中选择一个可能选择的协议。
注意缺少复数:http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html
就像在数据库中定义表名或在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属性的意图。“日”是一周中的哪一天,这个约会将要举行。否则,该方法的签名将被设置为Day(天日),并且可以肯定的是,很多人会想知道约会是否可以在一天以上发生。
如果你在一家公司工作,有48个小时的班次,你可以尝试定义如下内容:
public enum Days {
MONDAY_TUESDAY, WEDNESDAY_THURSDAY, FRIDAY_SATURDAY
}
这样,您就可以设置要工作的日子。但它仍然看起来很奇怪,并且有更好的选择,并且使用单数形式:
public enum Shift {
MONDAY_TUESDAY, WEDNESDAY_THURSDAY, FRIDAY_SATURDAY
}
现在你真的在展示枚举的含义。通常在任何域中,您都会发现对枚举使用单数是最佳选择,因为枚举中的每个常量只是一个元素。
你还提到了.NET。.NET 中的“flags”枚举只是意味着,当您期望该枚举作为参数时,您真正获得的是该枚举的元素列表(存储为整数)。
// 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。