Dav*_*ker 6 grails groovy grails-orm
我需要在创建域类的新实例时执行一些初始化.
class ActivationToken {
String foo
String bar
}
Run Code Online (Sandbox Code Playgroud)
当我这样做时,我希望通过ActivationToken内的代码初始化bar:
def tok = new ActivationToken(foo:'a')
Run Code Online (Sandbox Code Playgroud)
我无法看到如何"覆盖"'构造函数'来实现这一点.我知道在这种情况下我可以添加一个普通的构造函数,但这只是一个简单的例子.
Ove*_*ous 18
地图构造函数来自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()
Run Code Online (Sandbox Code Playgroud)
基本上,如果您需要在构造后处理属性,则似乎必须手动覆盖构造函数.
或者,您可以覆盖单个setter,这通常更干净,更安全:
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()
Run Code Online (Sandbox Code Playgroud)
请注意,不处理默认值,但在大多数情况下应该没问题.
| 归档时间: |
|
| 查看次数: |
6582 次 |
| 最近记录: |