2011-09-08 28 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')