2011-09-08 27 views
6

我想在Groovy中使用with block來輕鬆初始化我的類,但是我收到以下錯誤。誰能告訴我我做錯了什麼?groovy「與」塊使用查詢

MyXMLTemplate template = new MyXMLTemplate().with { 
    TxId = 'mnop' 
    oapTxId = 'abcd' 
} 

我得到的錯誤是:

org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast object 'abcd' with class 'java.lang.String' to class 'org.example.MyXMLTemplate' 
at org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation.castToType(DefaultTypeTransformation.java:331) 
at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.castToType(ScriptBytecodeAdapter.java:599) 

我使用Groovy 1.8.0

回答

14

您需要從with塊返回模板本身:

MyXMLTemplate template = new MyXMLTemplate().with { 
    TxId = 'mnop' 
    oapTxId = 'abcd' 
    it 
} 
+1

是的這個工程!雖然文檔沒有......( – Abe

+1

)文檔的哪個頁面?主要的Groovy網站是一個wiki,因此可以更改爲正確的:-) –

+0

我應該說「Javadoc」。我已經下載了源代碼,並且我在鼠標懸停時獲得了這個不完整的文檔.->這通常用於簡化對象創建,例如這個示例:def p = new Person()。with {firstName ='John'lastName ='Doe '} – Abe

3

很難看到的問題是什麼,沒有看到你的類的定義。我假設TxIdoapTxId都是這個類的屬性。

我懷疑你的錯誤是由oapTxIdMyXMLTemplate類型造成的,所以不能從String中分配。

Incidetally,爲您with塊僅僅是初始化類的屬性,你可以用更地道的構造函數和setter方法:

MyXmlTemplate template = new MyXMLTemplate(TxId: 'mnop', oapTxId : 'abcd')