在 groovy 中重写重载运算符时调用 super++

发布于 2024-10-29 15:22:05 字数 482 浏览 3 评论 0原文

这是我的代码,

@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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

北方的巷 2024-11-05 15:22:05

我不确定为什么 groovy++ 不允许调用 super 方法,但它引用的静态方法位于 org.codehaus.groovy.runtime.DefaultGroovyMethods 中:

import org.codehaus.groovy.runtime.DefaultGroovyMethods

assert DefaultGroovyMethods.plus([one: 1], [two: 2]) == [one: 1, two: 2]

您可以获取行为你正在通过调用它来寻找。

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:

import org.codehaus.groovy.runtime.DefaultGroovyMethods

assert DefaultGroovyMethods.plus([one: 1], [two: 2]) == [one: 1, two: 2]

You can get the behaviour you're looking for by calling that.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文