2011-12-14 23 views
11

我創建一個使用這個慣例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" 

回答

17

你有with方法,as described by the great Mr Haki

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

甜,謝謝...哈基先生是神嗎? – raffian 2011-12-14 16:30:43

+0

@RaffiM對於Groovy和Grails的用戶來說,他非常棒。 (他的博客很棒) – Grooveek 2011-12-14 16:33:44

3

是的,你可以像下面這樣做:

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

我更喜歡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)