枚举在Java命名:单数还是复数?(Naming of enums in Java: Singula

2019-08-18 22:46发布

有怎样的“官”的建议来命名的Java枚举?

enum Protocol { HTTP, HTTPS, FTP }

要么

enum Protocols { HTTP, HTTPS, FTP }

我知道在.NET世界的建议是使用单数,除了表示位标志枚举。 只是如果有好奇的在Java中类似的东西。

似乎一个相关的问题进行.Net的: 单数还是复数的枚举?

Answer 1:

在Java中枚举(可能枚举一般)应为单数。 该想法是,你不能选择多个协议,但在值列表可能选择的,而一个协议。

注意没有复数形式: http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html



Answer 2:

以同样的方式,当你在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。 在.NET A“标志”枚举只是意味着当您预期该枚举作为参数,你真正得到的是枚举(存储为整数)的元素的列表。

// 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这样做只是为了用一个列表。



文章来源: Naming of enums in Java: Singular or Plural?