Вызовите super при переопределении перегруженного оператора в groovy ++ - PullRequest
0 голосов
/ 04 апреля 2011

Это код, который у меня есть

@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()

1 Ответ

1 голос
/ 04 апреля 2011

Я не совсем уверен, почему groovy ++ не позволяет вызывать метод super, но статический метод, на который он ссылается, находится в org.codehaus.groovy.runtime.DefaultGroovyMethods:

import org.codehaus.groovy.runtime.DefaultGroovyMethods

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

Вы можете получить поведение, которое выищите, называя это.

...