在Java中有命名枚举的约定吗?
我的偏好是枚举是一种类型。例如,你有一个枚举
Fruit{Apple,Orange,Banana,Pear, ... }
NetworkConnectionType{LAN,Data_3g,Data_4g, ... }
我反对将其命名为:
FruitEnum
NetworkConnectionTypeEnum
我知道这很容易挑选出哪些文件是枚举,但你也会有:
NetworkConnectionClass
FruitClass
此外,是否有一个好的文档描述相同的常量,在哪里声明它们,等等?
如前所述,根据Oracle网站(http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html)上的文档,枚举实例应该是大写的。
然而,当我在Oracle网站(http://www.oracle.com/technetwork/java/javaee/downloads/index.html)上浏览JavaEE7教程时,我偶然发现了“Duke’sbookstore”教程,在一个类(教程\示例\案例研究\ Duke -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网站(http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html)上的文档,枚举实例应该是大写的。
然而,当我在Oracle网站(http://www.oracle.com/technetwork/java/javaee/downloads/index.html)上浏览JavaEE7教程时,我偶然发现了“Duke’sbookstore”教程,在一个类(教程\示例\案例研究\ Duke -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;
}
}
因此,似乎甲骨文公司的人有时也会用方便来交换惯例。
在我们的代码库中;我们通常在枚举所属的类中声明枚举。
对于你的Fruit例子,我们会有一个Fruit类,里面有一个Enum叫做Fruits。
在代码中引用它是这样的:Fruit.Fruits。苹果,Fruit.Fruits。梨,等等。
常量遵循同样的原则,它们要么在与之相关的类中定义(比如Fruit.ORANGE_BUSHEL_SIZE);或者在名为“ConstantManager”的类中应用系统范围(即int的等效“空值”)(或等效;如ConstantManager.NULL_INT)。(注;所有常量都是大写的)
与往常一样,您的编码标准可能与我的不同;所以YMMV。
它们仍然是类型,所以我总是使用与类相同的命名约定。
我绝对不赞成在名字中加入“Class”或“Enum”。如果你同时有一个FruitClass和一个FruitEnum,那么就有问题了,你需要更多描述性的名字。我试图思考那种会导致两者都需要的代码,似乎应该有一个带有子类型的Fruit基类,而不是枚举。(不过这只是我自己的猜测,你的情况可能和我想象的不一样。)
我能找到的命名常量的最好参考来自Variables教程:
If the name you choose consists of only one word, spell that word in all lowercase letters. If it consists of more than one word, capitalize the first letter of each subsequent word. The names gearRatio and currentGear are prime examples of this convention. If your variable stores a constant value, such as static final int NUM_GEARS = 6, the convention changes slightly, capitalizing every letter and separating subsequent words with the underscore character. By convention, the underscore character is never used elsewhere.