2013-04-07 41 views
0

因此,此代码是在考试中给出的,问题在于它有什么问题。它意在创建类型SomeClass的新对象,但前提是它们不是早期创建的。Java多线程 - 识别代码中的错误

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

我的猜测是,xgetX应该被声明为static,因为否则可能会出现的x多个副本。那是对的吗?如果是的话,那是代码中唯一的问题?

+3

这个类没有任何内在的错误(除了丢失的大括号,错误的命名和缺少文档)。它不能做它应该做的事情,但由于它没有文档,我们不知道它应该做什么。 – 2013-04-07 14:44:55

+2

一个右大括号('}')缺失。 – 2013-04-07 14:45:02

+2

是的,如果你只需要一个实例,它应该是静态的。 – assylias 2013-04-07 14:47:01

回答

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的的构造私有。