Groovy - 调用super.method()时的Stackoverflow

时间:2014-07-09 12:10:57

标签: groovy

我在改变返回类型(协变)的同时覆盖Groovy中的方法时遇到了问题。

我的测试代码是:

class Grandparent {
    public Grandparent doStuff( String s ){
        println "GP $s"
        this
    }
}

class Parent extends Grandparent{
    public Parent doStuff( String s ){
        println "P $s "
        this
    }
}

class Child extends Parent{
    public Child doStuff( String s ){
        println "C $s "
        super.doStuff(s)
        this
    }
}

Child c = new Child()
c.doStuff("Yo")

在上面的脚本中,代码堆栈溢出并且只是反复调用Child类上的doStuff()方法:

Caught: java.lang.StackOverflowError
java.lang.StackOverflowError
    at Child.doStuff(GroovyInheritanceTest.groovy:18)
    at Child.doStuff(GroovyInheritanceTest.groovy)
    at Parent.doStuff(GroovyInheritanceTest.groovy)
    at Child.super$3$doStuff(GroovyInheritanceTest.groovy)
    at Child.doStuff(GroovyInheritanceTest.groovy:18)
    at Child.doStuff(GroovyInheritanceTest.groovy)
    at Parent.doStuff(GroovyInheritanceTest.groovy)

如果

,则不会发生此问题

1)我们在heirarchy中只有两个班级(例如剪掉孩子) 2)doStuff的所有实例返回相同的类型,例如全部返回GradParent

我正在使用Groovy 2.1.5 - 它似乎在Groovy 2.2中工作。

有没有人知道是否有一个解决方法可以在Groovy 2.1.5中使用它,或者有一个错误号的详细信息,这是作为一部分修复的?

1 个答案:

答案 0 :(得分:1)

  

有没有人知道是否有一种解决方法可以在Groovy中使用它   2.1.5或者有一个错误号的详细信息,这是作为一部分修复的?

请参阅https://issues.apache.org/jira/browse/GROOVY-5810https://issues.apache.org/jira/browse/GROOVY-6818