【发布时间】:2011-04-07 12:38:01
【问题描述】:
我有一个看起来与此类似的类,而 findbugz 抱怨“从实例方法写入静态字段”(initialize() 和 killStaticfield())。我无法在 ctor 中设置静态字段。
- 解决此问题的最佳方法是什么?
-
将 staticField 放入 AtomicReference 就足够了吗?
public class Something { private static SomeClass staticField = null; private AnotherClass aClass; public Something() { } public void initialize() { //must be ctor'd in initialize aClass = new AnotherClass(); staticField = new SomeClass( aClass ); } public void killStaticField() { staticField = null; } public static void getStaticField() { return staticField; } }
【问题讨论】:
-
为了回答您的问题,这个字段是静态的,因为 get 方法需要是静态的,这样其他对象才能访问 staticField 而无需引用 Something 对象。
-
基本上,我的问题是修复“从实例方法写入静态字段”findbugz 警告的最佳方法是什么;我只是编写了代码来表示警告。将静态对象包装在 AtomicReference 对象中更好还是同步更好?