在Java中,我们使用静态初始化块:
private static final ApiKey API_KEY;
static {
API_KEY = new ApiKey();
}
我想知道
提前致谢。
答案 0 :(得分:9)
在某种程度上,这是一个品味问题。对我而言,只要:
考虑查看Google Guice及其非常好的Singleton implementation。
当然,如果您的应用程序是10行单级实验,那么这个问题要少得多。
请注意,在您的示例中,您可以简化为:
private static final ApiKey API_KEY = new ApiKey();
但这并不总是可行的。也许你省略了一些更复杂的初始化代码?在这种情况下,Guice再次值得一看。
答案 1 :(得分:4)
您可以使用以下代码完全避免使用静态初始化程序块:
private static final ApiKey API_KEY = new ApiKey();
或
private static final ApiKey API_KEY = createNewApiKey();
如果API密钥创建需要的不仅仅是构造函数调用。这使得代码更具可读性,恕我直言。但这并不重要。
当两个静态字段依赖于相同的初始化代码时,静态初始化程序非常有用:
static {
// compute some values
A = somePartOfTheComputedValues();
B = someOtherPartOfTheComputedValues();
}
但即便如此,A和B也许可以重构为一个对象,它将在一个方法中创建。
答案 2 :(得分:2)
我喜欢尽可能使用枚举。
而不是
class ApiKey {
private static final ApiKey API_KEY;
static {
API_KEY = new ApiKey();
}
我会写
enum ApiKey {
INSTANCE;