Class Groovy中分配对象属性的简写方法?

Class Groovy中分配对象属性的简写方法?,class,object,groovy,variable-assignment,Class,Object,Groovy,Variable Assignment,我使用这个约定创建Groovy对象 Item item1 = new Item( name: "foo", weight: "150") …是否有操作对象属性的速记约定?像这样的 item1( name: "hello", weight: "175") //this does not work, btw ;-) …而不是 item1.name = "hello" item1.weight = "175" 您有with方法 是的,您可以这样做: item1.metaClass.setProp

我使用这个约定创建Groovy对象

Item item1 = new Item( name: "foo", weight: "150")
…是否有操作对象属性的速记约定?像这样的

item1( name: "hello", weight: "175") //this does not work, btw ;-)
…而不是

item1.name = "hello"
item1.weight = "175"

您有
with
方法


是的,您可以这样做:

item1.metaClass.setProperties(item1, [name: "hello", weight: "175"])

我更喜欢item1。如果我有具体的变量要更改,请使用

item1.with {
    name = "lalal"
    weight = 86
    high = 100
}
当我有属性映射(可以是任何大小)时,我更喜欢InvokerHelper.setProperties

输出:

before: Item(foo, 150)
after : Item(abc, 22)

@RaffiM对于Groovy和Grails用户来说,他是伟大的。(他的博客很棒)如果对象没有覆盖
setAt
mehod或
[name:“hello”,weight:“175”],你也可以做类似的事情。每个{item1[it.key]=it.value}
。每个{item1.setProperty it.key,it.value}。
@ToString
class Item{
    def name
    def weight
}
Item item1 = new Item( name: "foo", weight: "150")

println "before: $item1"
use(InvokerHelper) {
    item1.setProperties weight: 22, name: "abc"
}
println "after : $item1"
before: Item(foo, 150)
after : Item(abc, 22)