相关疑难解决方法(0)

编码约定 - 命名枚举

是否存在在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 standards coding-style

280
推荐指数
5
解决办法
19万
查看次数

是否应在UPPER-CASE中声明"静态最终记录器"?

在Java中,静态最终变量是常量,惯例是它们应该是大写的.但是,我已经看到大多数人声称记录器是小写的,这在PMD中是违规的.

例如:

private static final Logger logger = Logger.getLogger(MyClass.class);
Run Code Online (Sandbox Code Playgroud)

只需搜索谷歌SO搜索"静态最终记录器",你就会看到这个.

我们应该使用LOGGER吗?

java logging static final naming-conventions

232
推荐指数
7
解决办法
6万
查看次数

方便地在enum和int/String之间映射

当使用只能获取有限数量值的变量/参数时,我会尝试始终使用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 enums coding-style

107
推荐指数
5
解决办法
12万
查看次数

Java中是否有类似sizeof的方法?

Java中是否有任何内置方法可以找到任何数据类型的大小?有没有办法找到大小?

java

72
推荐指数
6
解决办法
10万
查看次数

Java常量变量,命名约定

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)

java variables constants

28
推荐指数
2
解决办法
5万
查看次数

返回对存储在对象的一个​​字段中的可变对象值的引用会公开对象的内部表示

我在以下代码的代码上运行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)

java mutable checkstyle

6
推荐指数
1
解决办法
6874
查看次数