正在调用Groovy委托而不是所有者类

正在调用Groovy委托而不是所有者类,groovy,Groovy,我试图创建一个Groovy类,该类委托给ConfigObject属性,而它仍然有自己的两个属性。由于某种原因,我不能使它正常工作。从@Delegate注释的文档中可以看出,应该调用在所有者类上已经定义的任何方法,而不是将委托给Delegate属性。因为ConfigObject类实现了映射接口,所以这里有什么特别的事情吗 class ApplicationProperties { @Delegate(excludes = ["clone", "serverName", "serverIpA

我试图创建一个Groovy类,该类委托给ConfigObject属性,而它仍然有自己的两个属性。由于某种原因,我不能使它正常工作。从
@Delegate
注释的文档中可以看出,应该调用在所有者类上已经定义的任何方法,而不是将委托给Delegate属性。因为ConfigObject类实现了映射接口,所以这里有什么特别的事情吗

class ApplicationProperties {
    @Delegate(excludes = ["clone", "serverName", "serverIpAddress"])
    ConfigObject configData
    String serverName = "foo"
    String serverIpAddress = "bar"
}

调用
applicationProperties.serverName
不会返回foo,它将返回null,因为它正在委托configData实例变量。我尝试过使用特定的排除项,而不使用它们,似乎没有什么不同。如果我设置了
interfaces=false
,则serverName属性工作正常,但似乎没有其他内容委托给ConfigData。你知道我做错了什么吗?

如果你指的是
applicationProperties.getServerName()
,它的计算结果应该是“foo”。

那就行了!不使用属性访问器看起来很奇怪,但这是正确的。谢谢你的提示!我知道这种行为有点令人惊讶,但这并不是委托的问题。如果您编写一个实现Map的类,并且还有一个名为getServerName的方法,那么您将看到相同的问题。obj.serverName将调用obj.get('serverName'),这就是您的情况,因为ConfigObject实现了映射。根据您正在做的事情,如果您真的不需要实现Map,那么您可能会通过@Delegate(interfaces=false)逃脱惩罚,这正是我所想的,谢谢您的确认。我将在这里详细介绍我们的具体用途,我们可以决定哪种替代方案更好。再次感谢。