我有这个类,比方说,Foo
。它扩展了 JFrame
并且是一个单例。也就是说,它有两个静态字段:1) Foo
的实例和 2) Color
。
这是 Foo
的代码片段:
public class Foo extends JFrame{
private static final Color FOO_RED = new Color(155, 64, 69);
private static final Foo INSTANCE = new Foo();
private Foo(){
//do stuff
}
public static Foo getInstance(){
return INSTANCE;
}
}
我还有另一个类,比方说,Launcher
。这是负责启动应用程序的主类。这是一个简单的类,因为它唯一的工作就是将构造 Foo
的任务委托(delegate)给 EDT
。
这是Launcher
的代码片段:
public class Launcher{
public static void main(String[] args){
SwingUtilities.invokeLater((new Runnable(){
@Override
public void run()
{
Foo.getInstance();
}
}));
}
}
现在,一切正常。 但是,当我切换Foo
字段的顺序时(见下文),使用FOO_RED
的组件不再涂这种颜色。
public class Foo extends JFrame{
private static final Foo INSTANCE = new Foo(); //declared before Color
private static final Color FOO_RED = new Color(155, 64, 69);
private Foo(){
//do stuff
}
public static Foo getInstance(){
return INSTANCE;
}
}
那么,这就引出了一个问题,当涉及到 Swing
时,静态字段 的顺序是否重要?
最佳答案
如前所述,静态字段的顺序很重要。按照它们出现的顺序执行。
我将对这个示例进行另一个更改。这将使您的静态字段顺序变得不那么重要。
更新:使用 IDOH (Initialization on Demand Holder)使单例线程安全的模式。
private static class FooHolder {
private static final Foo INSTANCE = new Foo();
}
public static Foo getInstance(){
return FooHolder.INSTANCE;
}
关于java - 静态成员的顺序在 Swing 中是否敏感?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6153581/