Java中枚举的命名:单数还是复数?

Java中枚举的命名:单数还是复数?,java,enums,naming-conventions,Java,Enums,Naming Conventions,是否有关于如何命名Java枚举的“官方”建议 enum Protocol { HTTP, HTTPS, FTP } 或 我知道在.Net世界中,除了表示位标志的枚举外,建议使用单数。只是好奇Java中是否有类似的东西 一个似乎与.Net相关的问题:Java中的枚举(可能还有一般的枚举)应该是单数。我们的想法是,您没有选择多个协议,而是选择值列表中可能选择的一个协议 注意没有复数:正如在Java中定义数据库或类中的表名时,使用单数作为枚举一样,这也是最好的选择。看看你将如何使用它 让我们写一个例

是否有关于如何命名Java枚举的“官方”建议

enum Protocol { 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
}
现在,您真正展示了枚举的含义。通常在任何域中,您都会发现对枚举使用singular是最好的选择,因为枚举中的每个常量只是一个元素

你还提到了.NET。NET中的“标志”枚举仅意味着,当您期望该枚举作为参数时,您真正得到的是该枚举的元素列表(存储为整数)

在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;
}
}
公共枚举色调{
黑色、红色、绿色、蓝色;
私有最终整数色调;
色调(){

this.hue=1。枚举是类,这意味着,您应该以相同的方式声明它们。Microsoft似乎对.NET编程持有大致相同的观点:为什么使用复数?例如:
小时
…值是复数,枚举本身不是:-)实际上,更好的方法是使用一个封装了设置一个位集并为您处理所有这些问题。:-)
// Define an Enum with FlagsAttribute.
[FlagsAttribute] 
enum MultiHue : short
{
    Black = 0,
    Red = 1,
    Green = 2,
    Blue = 4
};

public void setMultiHue(MultiHue hues);
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;
}
}