我似乎无法覆盖grails控制器中的getter。我创建的示例代码用于说明这一点,如下所示:
class MyController extends RestfulController<MyDomainObj> {
def field
def getField(){
field += 1
}
def index(MyCommand command) {
field = 1
// in a controller this prints 1, but in my class it prints 2
println('field' + field)
}
}
如果我创建一个Groovy类并覆盖getter,那么它可以工作。
class X {
public static void main(String[] args){
def x = new X()
x.field = 1
println x.field
}
def field
def getField(){
field += 1
}
}
我在控制器中做错了什么或控制器不支持此功能?如果不支持,那么有谁知道为什么?是什么魔法会导致这个功能不起作用?
答案 0 :(得分:2)
对于类中的属性,Groovy直接使用生成的私有变量:
请参阅http://groovy.codehaus.org/Groovy+Beans:
如果从类中访问属性,则定义属性 在编译时使用隐式或显式(例如 this.foo,或简称foo),Groovy将直接访问该字段 而不是通过吸气剂和设定者。
示例:
class C {
def prop
def getProp() {
println "getter"
prop
}
def dostuff() {
prop = "Y"
println prop
println getProp()
}
}
new C().dostuff()
结果
Y
getter
Y