我在改变返回类型(协变)的同时覆盖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中使用它,或者有一个错误号的详细信息,这是作为一部分修复的?
答案 0 :(得分:1)
有没有人知道是否有一种解决方法可以在Groovy中使用它 2.1.5或者有一个错误号的详细信息,这是作为一部分修复的?
请参阅https://issues.apache.org/jira/browse/GROOVY-5810和https://issues.apache.org/jira/browse/GROOVY-6818。