Shorthand way for assigning object properties in G

2020-06-08 01:30发布

问题:

I create Groovy objects using this convention...

Item item1 = new Item( name: "foo", weight: "150")

...is there a shorthand convention for manipulating properties object? something like this...

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

...instead of...

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

回答1:

You have the with method, as described by the great Mr Haki

item1.with{
    name = "hello"
    weight = "175"
}


回答2:

Yes, you can do it like this:

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


回答3:

I prefer item1.with if I have concrete variables to change

item1.with {
    name = "lalal"
    weight = 86
    high = 100
}

I prefer InvokerHelper.setProperties when I have map of properties (can be any size)

@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"

Output:

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