2011-12-14 13 views
11

tworzę Groovy obiektów za pomocą tej konwencji ...Skrócony sposób na przypisanie właściwości obiektu w Groovy?

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

... tam jest skrótowym Konwencja o manipulowanie właściwości obiektu? coś takiego ...

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

... zamiast ...

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

Odpowiedz

3

Tak, można zrobić to w ten sposób :

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

Możesz także zrobić coś w stylu: "[imię:" cześć ", waga:" 175 "]. Każdy {item1 [it.key] = it.value}' jeśli obiekt nie nadpisuje ' setAt' mehod lub '[name:" hello ", waga:" 175 "]. Każdy {item1.setProperty it.key, it.value}'. – epidemian

1

Wolę item1.with jeśli mam zmienne konkretne zmiany

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

Wolę InvokerHelper.setProperties kiedy mam mapę właściwości (może być dowolny rozmiar)

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

Wyjście:

before: Item(foo, 150) 
after : Item(abc, 22) 
Powiązane problemy