在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。