编码约定 – 命名枚举

是否有一个约定在Java中枚举枚举?

我的首选是一个枚举types。 所以,例如,你有一个枚举

Fruit{Apple,Orange,Banana,Pear, ... } NetworkConnectionType{LAN,Data_3g,Data_4g, ... } 

我反对命名它:

 FruitEnum NetworkConnectionTypeEnum 

我明白,挑选哪些文件是枚举很容易,但是你也可以:

 NetworkConnectionClass FruitClass 

另外,是否有一个很好的文档描述常量,在哪里声明它们等?

枚举是类,应遵循类的约定。 枚举的实例是常量,应遵循常量的约定。 所以

 enum Fruit {APPLE, ORANGE, BANANA, PEAR}; 

没有任何比FruitClass更多的编写FruitEnum的理由。 你只是在浪费四个(或五个)不添加任何信息的字符。

Java本身推荐了这种方法,并在其示例中使用 。

这可能不会让我有很多新的朋友,但应该补充一点,C#人有一个不同的指导方针:枚举实例是“帕斯卡情况”(大小写混合)。 请参阅stackoverflow讨论和MSDN枚举types命名指南 。

当我们正在与C#系统交换数据时,我很想复制他们的枚举,而忽略Java的“常量有大写名字”的约定。 考虑一下,我并没有看到枚举实例被限制为大写的很多值。 出于某种目的,.name()是一个方便的快捷方式,用于获取枚举常量的可读表示,混合大小写名称看起来更好。

所以,是的,我敢问Java枚举命名约定的价值。 “编程世界的另一半”的确使用了不同的风格,这使我认为怀疑自己的宗教是合理的。

在我们的代码库中; 我们通常在他们所属的类中声明枚举。

所以对于你的水果的例子,我们将有一个水果类,并在里面一个名为水果的枚举。

在代码中引用它看起来像这样: Fruit.Fruits.Apple, Fruit.Fruits.Pear

常量遵循相同的路线,他们要么在他们相关的类中定义(例如Fruit.ORANGE_BUSHEL_SIZE ); 或者如果它们应用于名为“ConstantManager”的类(或等同的;类似于ConstantManager.NULL_INT )的系统范围(即,用于整数的等效“空值”)。 (旁注;我们所有的常量都是大写的)

与往常一样,您的编码标准可能与我的不同。 所以YMMV。

如前所述,根据Oracle网站上的文档( http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html ),枚举实例应该是大写的。

但是,在浏览Oracle网站( http://www.oracle.com/technetwork/java/javaee/downloads/index.html )上的JavaEE7教程的同时,我偶然发现了“Duke's bookstore”教程,并在课堂上tutorial\examples\case-studies\dukes-bookstore\src\main\java\javaeetutorial\dukesbookstore\components\AreaComponent.java ),我发现以下枚举定义:

 private enum PropertyKeys { alt, coords, shape, targetImage; } 

按照惯例,它应该是这样的:

 public enum PropertyKeys { ALT("alt"), COORDS("coords"), SHAPE("shape"), TARGET_IMAGE("targetImage"); private final String val; private PropertyKeys(String val) { this.val = val; } @Override public String toString() { return val; } } 

所以看起来即使是Oracle的人也有时会用便捷的方式来交易会议。

他们仍然是types,所以我总是使用相同的命名约定,我用于类。

我肯定会不好意思把“Class”或“Enum”放在一个名字里。 如果你同时拥有一个FruitClass和一个FruitEnum那么别的东西就是错的,你需要更多的描述性名字。 我想要考虑那种会导致两者都需要的代码,而且好像应该有一个带有子types的Fruit基类,而不是枚举types。 (虽然这只是我自己的猜测,但你可能会有与我想象的不同的情况。)

我可以find命名常量的最佳参考来自“ variables”教程 :

如果您select的名称只包含一个单词,则拼写该单词的所有小写字母。 如果它包含多个单词,则将每个后续单词的首字母大写。 gearRatio和currentGear是这个约定的主要例子。 如果你的variables存储了一个常数值,比如static final int NUM_GEARS = 6,那么约定稍有变化,大写每个字母并用下划线分隔后续的单词。 按照惯例,下划线字符从来不会在其他地方使用。