正如标题所说,这是否有任何区别:
public final class Foo {
private static final Foo foo;
private final ArrayList<String> text = new ArrayList<String>();
//other members
public static Foo getFooInstance(){
if(foo == null)
{
foo = new Foo();
}
return foo;
}
public ArrayList<String> getList(){
return text;
}
和
public final class Foo {
private static final Foo foo = new Foo();
private final ArrayList<String> text;
private Foo(){
//other members
text = new ArrayList<String>();
}
public static Foo getFooInstance(){
return foo;
}
public ArrayList<String> getList(){
return text;
}
我认为没有区别,更清楚的是,我发布了这个问题。
答案 0 :(得分:2)
两者都是final
变量在构造函数中或在声明本身时初始化它的有效方法。
您可以使用另一种方法初始化initialization
块中的最终实例变量。
示例代码:
public final class Foo {
private final ArrayList<String> text;
// initialization block
{
text = new ArrayList<String>();
}
}
Singleton是Gang of Four设计模式的一部分,它根据创作设计模式进行分类。
您的第一个解决方案是使用懒惰初始化单例模式。使用双重检查锁定单例模式使其线程安全。
在MultiThreading的情况下,您的第二个解决方案更安全,其中实例在声明本身时初始化。
详细了解Singleton Design Pattern – An Introspection w/ Best Practices