Class Groovy中分配对象属性的简写方法?
我使用这个约定创建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
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)