Сокращенный способ назначения свойств объекта в Groovy?

Я создаю объекты 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"

Ответы

Ответ 2

Да, вы можете сделать это следующим образом:

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

Ответ 3

Я предпочитаю item1.with, если у меня есть конкретные переменные для изменения

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

Я предпочитаю InvokerHelper.setProperties, когда у меня есть карта свойств (может быть любого размера)

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