在 groovy 中重写重载运算符时调用 super++
这是我的代码,
@Typed class FooMap extends LinkedHashMap {
def doSomeFoo() {
// ...
}
FooMap plus(Collection coll) {
super.plus(coll)
}
}
虽然它在普通的 Groovy 中工作,但用 Groovy++ 编译它会出现错误: 无法使用“super”引用默认的 groovy 方法“plus”。改为调用静态方法
。我不知道这是 Groovy++ 中的一个错误,还是它本来就是这样工作的。不管怎样,我想以类型化的方式调用 super
。我该如何解决这种情况?
我想要这样的方法的原因是我希望这段代码能够编译。
FooMap map = new FooMap() + [bar: 42]
map.doSomeFoo()
This is the code I have
@Typed class FooMap extends LinkedHashMap {
def doSomeFoo() {
// ...
}
FooMap plus(Collection coll) {
super.plus(coll)
}
}
While it works in plain Groovy, compiling it with Groovy++ gives an error: Cannot reference default groovy method 'plus' using 'super'. Call the static method instead
. I don't if it's a bug in Groovy++, or it's meant to work this way. Anyway, I want to call super
in a typed way. How can I workaround this situation?
The reason why I want such a method is that I want this code to compile.
FooMap map = new FooMap() + [bar: 42]
map.doSomeFoo()
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我不确定为什么 groovy++ 不允许调用 super 方法,但它引用的静态方法位于 org.codehaus.groovy.runtime.DefaultGroovyMethods 中:
您可以获取行为你正在通过调用它来寻找。
I'm not sure exactly why groovy++ doesn't allow the super method to be called, but the static method it refers to is in
org.codehaus.groovy.runtime.DefaultGroovyMethods
:You can get the behaviour you're looking for by calling that.