Конструктор карт идет из Groovy, а не из Grails.Я провел некоторые эксперименты, и вот что я придумал:
class Foo {
String name = "bob"
int num = 0
public Foo() {
this([:])
}
public Foo(Map map) {
map?.each { k, v -> this[k] = v }
name = name.toUpperCase()
}
public String toString() {
"$name=$num"
}
}
assert 'BOB=0' == new Foo().toString()
assert 'JOE=32' == new Foo(name:"joe", num: 32).toString()
По сути, кажется, что вам придется вручную переопределить конструкторы, если вам нужно обработать свойство после построения.
Кроме того, вы можете переопределить отдельные сеттеры, что в целом чище и безопаснее:
class Foo {
String name = "bob"
int num = 0
public void setName(n) {
name = n.toUpperCase()
}
public String toString() {
"$name=$num"
}
}
assert 'bob=0' == new Foo().toString()
assert 'JOE=32' == new Foo(name:"joe", num: 32).toString()
Обратите внимание, что значение по умолчанию не обрабатывается, но в большинстве случаев это должно быть в порядке.