是否存在在Java中命名枚举的约定?
我的偏好是枚举是一种类型.所以,例如,你有一个枚举
Fruit{Apple,Orange,Banana,Pear, ... }
NetworkConnectionType{LAN,Data_3g,Data_4g, ... }
Run Code Online (Sandbox Code Playgroud)
我反对命名它:
FruitEnum
NetworkConnectionTypeEnum
Run Code Online (Sandbox Code Playgroud)
我知道很容易找出哪些文件是枚举,但是你也可以:
NetworkConnectionClass
FruitClass
Run Code Online (Sandbox Code Playgroud)
另外,是否有一个好的文档描述了常量,在哪里声明它们等等?
在Java中,静态最终变量是常量,惯例是它们应该是大写的.但是,我已经看到大多数人声称记录器是小写的,这在PMD中是违规的.
例如:
private static final Logger logger = Logger.getLogger(MyClass.class);
Run Code Online (Sandbox Code Playgroud)
我们应该使用LOGGER吗?
当使用只能获取有限数量值的变量/参数时,我会尝试始终使用Java enum,如
public enum BonusType {
MONTHLY, YEARLY, ONE_OFF
}
Run Code Online (Sandbox Code Playgroud)
只要我留在我的代码中,就可以了.但是,我经常需要与其他使用普通int(或String)值的代码进行交互以达到相同的目的,或者我需要从/向数据库读取/写入数据,其中数据存储为数字或字符串.
在这种情况下,我想有一个方便的方法将每个枚举值与一个整数相关联,这样我就可以双向转换(换句话说,我需要一个"可逆的枚举").
从枚举到int很容易:
public enum BonusType {
public final int id;
BonusType(int id) {
this.id = id;
}
MONTHLY(1), YEARLY(2), ONE_OFF(3);
}
Run Code Online (Sandbox Code Playgroud)
然后我可以访问int值BonusType x = MONTHLY; int id = x.id;.
但是,我没有看到反向的好方法,即从int到enum.理想情况下,像
BonusType bt = BonusType.getById(2);
Run Code Online (Sandbox Code Playgroud)
我能想出的唯一解决方案是:
BonusType.values()用于填充映射"int - > enum",然后缓存并将其用于查找.会工作,但我必须将这个方法完全复制到我使用的每个枚举中:-(.对于这样一个简单的(?)问题,这两种方法看起来都非常尴尬.
还有其他想法/见解吗?
java常量变量是否有任何命名约定?
通常我们使用名称包含大写字母和下划线(_)的变量.
例如:
public final class DeclareConstant {
public static final String CONSTANT_STRING = "some constant";
public static final int CONSTANT_INTEGER = 5;
}
Run Code Online (Sandbox Code Playgroud) 我在以下代码的代码上运行checkstyle时遇到此错误:
@Override
public String[] getDescriptions() {
return DESCRIPTIONS;
}
Run Code Online (Sandbox Code Playgroud)
但是DESCRIPTIONS IS NOT可变.它被定义为:
private static final String[] DESCRIPTIONS = new String[NUM_COLUMNS];
static {
// In a loop assign values to the array.
for (int i = 0; i < NUM_COLUMNS; ++i) {
DESCRIPTIONS[i] = "Some value";
}
}
Run Code Online (Sandbox Code Playgroud)
这是完整的错误消息:
"Returning a reference to a mutable object value stored in one
of the object's fields exposes the internal representation of
the object. If instances are accessed by untrusted code, and
unchecked …Run Code Online (Sandbox Code Playgroud)