所以这段代码是在考试中给出的,问题是它有什么问题。它的目的是创建SomeClass
类型的新对象,但前提是它们不是先创建的。
class Foo {
private SomeClass x = null;
public synchronized SomeClass getX() {
if (x == null)
x = new SomeClass();
return x;
}
}
我的猜测是x
和getX
应该声明为静态,否则可能会有x
的多个副本。那是对的吗?如果这是代码中唯一的问题?
答案 0 :(得分:1)
您正在尝试构建单件工厂方法:
public class Foo {
private static SomeClass x = null;
public static synchronized SomeClass getSomeClass() {
if (x == null)
x = new SomeClass();
return x;
}
}
请注意,如果你真的需要这个,你也应该让SomeClass成为Foo的内部类,并使SomeClass的构造函数成为私有。