【问题标题】:Groovy subclass called superclass method that accesses closureGroovy 子类称为访问闭包的超类方法
【发布时间】:2012-03-24 00:08:09
【问题描述】:

我有一个时髦的超类,看起来像:

class AGroovyClass {
   private String str = "hello"
   void printString(int nTimes) {
     nTimes.times { println str } 
  }        
}

和子类

class AGroovySubclass extends AGroovyClass {
   // some other subclass methods
}

我的客户代码调用:

new AGroovySubclass().printString(5)

这实际上中断了,因为它说 AGroovySubclass 没有这样的属性“str”

我会认为既然 printString 方法在 AGroovyClass 中,访问“str”属性应该没有问题,但显然我错了。如果我想保持“str”私有,那么使这项工作的适当方法是什么?

【问题讨论】:

    标签: groovy closures


    【解决方案1】:

    这是一个带有私有访问修饰符的老错误。如果您定义 str protected,它会起作用。 https://issues.apache.org/jira/browse/GROOVY-2433

    编辑:你能避免关闭,而是使用 for 循环吗?不是很酷,但很有效:)

    【讨论】:

    • dvcs 是正确的,关于解决方法也是如此。将nTimes.times { println str } 更改为for( i in 1..nTimes ) { println str }——即:使用for 循环而不是times 闭包——有效
    • for 循环的性能也会稍微好一些(可能是 10 毫秒):)
    • 啊,是的,谢谢。如果需要,我可以使用 for 循环。我也可以在闭包之外创建一个指向成员变量的局部变量,然后它也可以工作。
    • 迟到的谢谢。我刚刚偶然发现了这个问题,并且正要发布一个问题。你帮我省了麻烦!
    猜你喜欢
    • 1970-01-01
    • 2017-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-08
    • 2016-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多