0

所以这段代码是在考试中给出的,问题是它有什么问题。它旨在创建新的类型对象,SomeClass但前提是它们不是之前创建的。

class Foo {
    private SomeClass x = null;
    public synchronized SomeClass getX() {
        if (x == null)
            x = new SomeClass();
        return x;
    }
}

我的猜测是x并且getX应该被声明为静态的,否则可能会有多个x. 那是对的吗?如果是这样,那是代码中唯一的问题吗?

4

1 回答 1

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 的构造函数设为私有。

于 2013-04-07T14:55:19.413 回答