2011-10-16 64 views
0

常規辛格爾頓常規單訪問重載的構造

@Singleton 
class test { 

    private test(){ 
     //some Method call  
    } 

    private test(def x){ 
     //some Method call 
    } 
} 

test.groovy

def test1 = test.instance 

當我發出以下聲明它爲我工作,我可以看到defualt 構造函數被調用

我怎麼能創建instanace,同時使用第二construcor論據

如果我發出

def test2 = test("anish").instance 

它拋出我的錯誤我如何解決這個任何建議

groovy.lang.MissingMethodException: No signature of method: test.test() is applicable for argument types: (java.lang.String) values: [anish] 
    at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:54) 
    at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:78) 
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:44) 
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:143) 
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:151) 
+0

請包括錯誤。我不得不看看實際的轉換,但我不確定它會與非默認ctors一起工作。 –

+0

@Dave添加了錯誤 – anish

+0

老兄!爲什麼使用模式,如果你不明白它的目的?聲明一個班級單身人士的整個觀點是限制它只有一個實例 –

回答

5

在您訪問的靜態屬性test.instance,進而調用靜態方法第一種情況test.getInstance() 。在第二種情況下,它看起來像是在嘗試將第二個構造函數作爲方法調用。這不是有效的groovy:你需要使用new關鍵字來創建一個實例,這會觸發構造函數。另外,使構造函數保持私有狀態,除了類本身之外,它是不可訪問的。

如果你需要實例化另一個實例,它可能不應該是一個單身。

+0

+ 1 esp最後一句 –

+0

LOL)這就像建造推土機,然後想知道爲什麼它不飛。有些人讓我吃驚。 –