使用使用在groovy中看到良好的工作examples。
问题但是,在使用关键字 this.with {..} 的组合时,遇到问题或无法理解未提供所需输出的原因如下所示:
以下是 Person.groovy
的代码class Person {
def name
def address
def mail
Person(name, address, mail){
this.with {
name = name
address = address
mail = mail
}
}
String toString() {
"${name} ${address} ${mail}"
}
}
当您使用以下代码调用上述类时,输出将显示为 null null null
而不是 abc xyz abc@example.com
def person1 = new Person('abc', 'xyz', 'abc@example.com')
println person1.toString()
答案 0 :(得分:2)
应该是:
class Person {
def name
def address
def mail
Person(name, address, mail){
with {
this.name = name
this.address = address
this.mail = mail
}
}
String toString() {
"${name} ${address} ${mail}"
}
}
def person1 = new Person('abc', 'xyz', 'abc@example.com')
println person1.toString()
因为groovy不知道如何区分name
与对象和传递给构造函数的name
参数。
您也可以尝试:
Person(namea, addressa, maila){
with {
name = namea
address = addressa
mail = maila
}
}
如果更改变量名称(我的意思是类字段的调用方式与构造函数args不同),则不是with
也不是。
答案 1 :(得分:2)
Groovy无法将相同的标识符解析为两个不同的元素。您可以尝试使用setX
代替:
class Person {
def name
def address
def mail
Person(name, address, mail){
setName name
setAddress address
setMail mail
}
String toString() { "$name $address $mail" }
}
assert new Person('abc', 'xyz', 'abc@example.com').toString() ==
'abc xyz abc@example.com'