Сокращенный способ назначения свойств объекта в Groovy? - PullRequest
15 голосов
/ 14 декабря 2011

Я создаю 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"

Ответы [ 3 ]

21 голосов
/ 14 декабря 2011

У вас есть метод with, , как описано великим мистером Хаки

item1.with{
    name = "hello"
    weight = "175"
}
3 голосов
/ 14 декабря 2011

Да, вы можете сделать это так:

item1.metaClass.setProperties(item1, [name: "hello", weight: "175"])
2 голосов
/ 10 мая 2014

Я предпочитаю 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...