gpt4 book ai didi

inheritance - 从扩展类调用时,groovy 中的闭包不能使用私有(private)字段

转载 作者:行者123 更新时间:2023-12-03 20:20:56 26 4
gpt4 key购买 nike

我有一个 groovy 类,我有一个私有(private)字段和一个方法。在该方法中,我调用 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

这是为什么?为什么父类(super class)方法在 Groovy 中看不到父类(super class)中定义的属性?

最佳答案

Groovy 中的默认访问修饰符是 public ,这有助于无缝地创建 POGO,因为 Groovy 在类生成时会自动添加访问器方法。

当访问修饰符更改为 private , groovy 不会为该属性创建任何访问器方法。为了将该私有(private)属性作为只读属性访问getJSessionIdCookie()方法必须添加到基类中。

getJSessionIdCookie() { jSessionIdCookie }

现在,当您访问 jSessionIdCookie在子类中, getProperty元类实现将调用上述 getter 方法。

关于inheritance - 从扩展类调用时,groovy 中的闭包不能使用私有(private)字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24071667/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com