0

これは私が持っているコードです

@Typed class FooMap extends LinkedHashMap {
  def doSomeFoo() {
    // ...
  }

  FooMap plus(Collection coll) {
    super.plus(coll)
  }
}

プレーンな Groovy では動作しますが、Groovy++ でコンパイルするとエラーが発生します: Cannot reference default groovy method 'plus' using 'super'. Call the static method instead. それがGroovy ++のバグなのか、それともこのように動作することを意図しているのかはわかりません。superとにかく、私はタイプされた方法で呼び出したいです。この状況を回避するにはどうすればよいですか?

このようなメソッドが必要な理由は、このコードをコンパイルするためです。

FooMap map = new FooMap() + [bar: 42]
map.doSomeFoo()
4

1 に答える 1

1

groovy++ がスーパー メソッドの呼び出しを許可しない理由は正確にはわかりませんが、それが参照する静的メソッドはorg.codehaus.groovy.runtime.DefaultGroovyMethods:

import org.codehaus.groovy.runtime.DefaultGroovyMethods

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

それを呼び出すことで、探している動作を取得できます。

于 2011-04-04T17:29:41.670 に答える