在Java中有命名枚举的约定吗?
我的偏好是枚举是一种类型。例如,你有一个枚举
Fruit{Apple,Orange,Banana,Pear, ... }
NetworkConnectionType{LAN,Data_3g,Data_4g, ... }
我反对将其命名为:
FruitEnum
NetworkConnectionTypeEnum
我知道这很容易挑选出哪些文件是枚举,但你也会有:
NetworkConnectionClass
FruitClass
此外,是否有一个好的文档描述相同的常量,在哪里声明它们,等等?
如果我可以添加我的$0.02,我更喜欢使用PascalCase作为C中的enum值。
在C语言中,它们基本上是全局的,与PeerConnected相比,PEER_CONNECTED非常累人。
呼吸新鲜空气。
真的,它让我呼吸更轻松。
在Java中,只要从另一个类中静态导入原始enum名称,就可以使用它们。
import static pkg.EnumClass.*;
现在,你可以使用非限定名称,你已经用另一种方式限定了。
我目前(正在考虑)将一些C代码移植到Java,目前在选择Java惯例(更冗长、更冗长、更丑陋)和我的C风格之间“犹豫不决”。
PeerConnected将变成PeerState。CONNECTED, switch语句除外,此处为CONNECTED。
现在对于后一种约定有很多要说的,它确实看起来不错,但某些“惯用短语”,如if (s == PeerAvailable)变成了if (s == PeerState.AVAILABLE),怀旧地说,这对我来说是没有意义的。
我想我仍然更喜欢Java风格,因为它清晰明了,但我很难看到那些令人尖叫的代码。
现在我意识到PascalCase在Java中已经被广泛使用了,但它并不令人困惑,只是有点不合时宜。
在我们的代码库中;我们通常在枚举所属的类中声明枚举。
对于你的Fruit例子,我们会有一个Fruit类,里面有一个Enum叫做Fruits。
在代码中引用它是这样的:Fruit.Fruits。苹果,Fruit.Fruits。梨,等等。
常量遵循同样的原则,它们要么在与之相关的类中定义(比如Fruit.ORANGE_BUSHEL_SIZE);或者在名为“ConstantManager”的类中应用系统范围(即int的等效“空值”)(或等效;如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’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;
}
}
因此,似乎甲骨文公司的人有时也会用方便来交换惯例。