2011-12-14 24 views
11

tôi tạo các đối tượng sử dụng Groovy ước này ...Cách viết tắt để gán thuộc tính đối tượng trong Groovy?

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

... là có một quy ước viết tắt cho thao tác đối tượng thuộc tính? một cái gì đó như thế này ...

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

... thay vì ...

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

Trả lời

17

Bạn có phương pháp with, as described by the great Mr Haki

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

Ngọt ngào, cảm ơn ... Haki à? – raffian

+0

@RaffiM dành cho người dùng Groovy và Grails, anh ấy rất tuyệt. (blog của anh ấy thật tuyệt) – Grooveek

3

Vâng, bạn có thể làm điều đó như thế này :

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

Bạn cũng có thể làm một cái gì đó như '[name:" hello ", weight:" 175 "]. mỗi {item1 [it.key] = it.value}' nếu đối tượng không ghi đè lên ' setAt' mehod hoặc '[name:" hello ", weight:" 175 "]. mỗi {item1.setProperty it.key, it.value}'. – epidemian

1

Tôi thích item1.with nếu tôi có các biến cụ thể để thay đổi

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

tôi thích InvokerHelper.setProperties khi tôi có bản đồ tài sản (có thể là bất kỳ kích thước)

@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) 
Các vấn đề liên quan