mre*_*mre 2 java singleton swing static-members
我有这个课,比方说Foo.它extends JFrame是一个单身人士.话虽如此,它有两个静态字段:1)Foo和2 的实例a 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;
}
}
Run Code Online (Sandbox Code Playgroud)
我还有另一堂课,比方说Launcher.这是负责启动应用程序的主类.这是一个简单的类,它唯一的工作就是将构造任务委托Foo给EDT.
这是一段代码片段Launcher:
public class Launcher{
public static void main(String[] args){
SwingUtilities.invokeLater((new Runnable(){
@Override
public void run()
{
Foo.getInstance();
}
}));
}
}
Run Code Online (Sandbox Code Playgroud)
现在,这一切都很好.但是,当我切换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;
}
}
Run Code Online (Sandbox Code Playgroud)
所以,这引出了一个问题,静态字段的排序是否重要Swing?
如前所述,静态字段的排序很重要.按照出现的顺序执行.
我会对这个例子做另一个改动.这会使静态字段顺序变得不那么重要.
更新:使用IDOH(初始化按需持有者)模式使单例线程安全.
private static class FooHolder {
private static final Foo INSTANCE = new Foo();
}
public static Foo getInstance(){
return FooHolder.INSTANCE;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
102 次 |
| 最近记录: |