【发布时间】:2014-11-20 09:38:56
【问题描述】:
查看这个不完整的代码片段:
public class Singleton implements Serializable {
private static class SingletonHolder {
private static final Singleton SINGLETON_INSTANCE;
static {
Singleton tmp = singletonTMP;
if (tmp != null) {
SINGLETON_INSTANCE = tmp;
} else {
// etc.
}
}
}
private static volatile Singleton singletonTMP;
// etc.
}
我在 NetBeans 中的 Singleton tmp = singletonTMP; 行收到一个奇怪的警告:“Usage of static non-final variable used during initialization”。
所以,是的。这当然是对的,但为什么会出现这样的问题呢?
【问题讨论】:
-
我认为这是一个安全问题,攻击者可以用新对象替换您的静态字段。当属性也被定义为公共时,就会发生这种情况。我假设 netbeans 认为这是一种风险并显示警告,即使您将其声明为私有
标签: java netbeans static final