我有一个 groovy 课程,其中有一个私有字段和一个方法。在该方法中,我调用 http 服务,并在其中传递一个闭包来处理响应。像这样的事情:
class WebUiRestRequestSender {
private String jSessionIdCookie
def login(String username, String password) {
//...
httpClient.post(
path: login,
body: parameters,
requestContentType : URLENC
) { resp, reader ->
jSessionIdCookie = getSessionCookie(resp)
}
}
}
当我创建此类的对象并调用此方法时,一切正常。但是,当我从此类继承并尝试从继承类调用该方法时,出现错误:
groovy.lang.MissingPropertyException: No such property: jSessionIdCookie for class: ResellerWebUiRestRequestSender
这是为什么?为什么超类方法看不到 Groovy 中超类中定义的属性?
Groovy 中的默认访问修饰符是public
,这有助于无缝创建 POGO,因为 Groovy 在类生成时自动添加访问器方法。
当访问修饰符更改为private
,groovy 不会为该属性创建任何访问器方法。为了以只读属性的形式访问该私有属性getJSessionIdCookie()
必须将方法添加到基类中。
getJSessionIdCookie() { jSessionIdCookie }
现在,当您访问jSessionIdCookie
在子类中,getProperty
元类实现将调用上面的 getter 方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)