2013-04-07 38 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的的構造私有。