在Java中枚举的命名:是单数还是复数?
在Java中枚举的命名:是单数还是复数?
是否有关于如何命名Java枚举的“官方”建议?
enum Protocol { HTTP, HTTPS, FTP }
还是
enum Protocols { HTTP, HTTPS, FTP }
我知道在.NET世界中,建议使用单数形式,除非枚举代表位标志。只是好奇在Java中是否有类似的建议。
一个相关的问题似乎只适用于.NET:枚举使用单数还是复数形式?
在Java中,枚举类型的命名应该使用单数形式还是复数形式?这个问题的出现是因为在定义数据库中的表名或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"表示一周中这个预约将举行的那一天。否则,方法的签名将为setDay(Days day),肯定会有很多人想知道预约是否可能在多天内发生。
如果你在一个每次工作48小时的公司工作,你可以尝试定义如下内容:
public enum Days { MONDAY_TUESDAY, WEDNESDAY_THURSDAY, FRIDAY_SATURDAY }
这样你就可以设置你要工作的天数。但是这看起来仍然很奇怪,还有更好的选择,就是使用单数形式:
public enum Shift { MONDAY_TUESDAY, WEDNESDAY_THURSDAY, FRIDAY_SATURDAY }
现在你真正展示了枚举的含义。通常在任何领域中,使用单数形式的枚举是最佳选择,因为枚举中的每个常量只是一个元素。
你还提到了.NET。在.NET中,"flags"枚举只是表示当你将枚举作为参数时,你实际上得到的是该枚举的一个元素列表(以整数形式存储)。
你可以在Java中做同样的事情,但枚举仍然是单数形式:
// 定义一个带有FlagsAttribute的枚举。 [FlagsAttribute] enum MultiHue : short { Black = 0, Red = 1, Green = 2, Blue = 4 }; public void setMultiHue(MultiHue hues);
用Java更简单、更清晰的方法(虽然它使用了更多的内存)是使用List。实际上,更好的方法是使用EnumSet,它封装了BitSet并为你处理所有这些。 🙂