groovy“with”块使用查询

时间:2011-09-08 07:56:33

标签: groovy

我正在尝试使用Groovy中的with块来轻松地将我的类初始化,但是我收到以下错误。谁能告诉我我做错了什么?

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

2 个答案:

答案 0 :(得分:17)

您需要从with块返回模板:

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

答案 1 :(得分:3)

如果没有看到班级的定义,很难看出问题所在。我假设TxIdoapTxId都是该类的属性。

我怀疑您的错误是由oapTxId类型为MyXMLTemplate引起的,因此无法从String中分配。

因为你的with块只是初始化类属性,你可以使用更惯用的构造函数和setter方法:

MyXmlTemplate template = new MyXMLTemplate(TxId: 'mnop', oapTxId : 'abcd')
相关问题