[英]Is Static Initialization Good Programming Practice?
在Java中,我们使用静态初始化块:
private static final ApiKey API_KEY;
static {
API_KEY = new ApiKey();
}
我在想这个
提前致谢。
在某种程度上,这是一个品味问题。 对我而言,只要:
静态倾向于使编写好的测试变得更难。 如果您发现想要开始修改静态,那么您可能需要再次查看设计。
考虑一下Google Guice及其非常好的Singleton实现 。
当然,如果您的应用程序是10行单级实验,那么这个问题要少得多。
请注意,在您的示例中,您可以简化为:
private static final ApiKey API_KEY = new ApiKey();
但这并不总是可行的。 也许你省略了一些更复杂的初始化代码? 在这种情况下,Guice再次值得一看。
您可以使用以下代码完全避免使用静态初始化程序块:
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也许可以重构为单个对象,它将在单个方法中创建。
我喜欢尽可能使用枚举。
代替
class ApiKey {
private static final ApiKey API_KEY;
static {
API_KEY = new ApiKey();
}
我会写的
enum ApiKey {
INSTANCE;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.