Методы Groovy :: @Mixin переопределяют методы целевого класса - PullRequest
2 голосов
/ 23 февраля 2011
class A {  
  def test() { println "parent" }  
} 

@Mixin(A)  
class B {  
  def test() { println "child" }  
} 

new B().test() // prints "parent", but I am expecting it to print "child"

Это похоже на некое обратное наследование.

Могут ли миксины использоваться только как средство для определения новых методов?

Я, конечно, могу использовать обычное наследование и работать с расширениями, но вариант использования влечет за собой построитель форм, где каждый домен имеет уникальную реализацию формы, и я хотел бы, чтобы в моем контроллере приложения перехватывался запрос формы исделать метод MyUniqueDomainForm.mixin DefaultFormMethods (поэтому мне нужно определять методы по умолчанию только тогда, когда мне нужно, а также не нужно импортировать my.package.app.DefaultFormMethods в каждом классе формы)

1 Ответ

2 голосов
/ 23 февраля 2011

Что бы вы ни mixin перегрузили все, что уже есть ...

В этом примере во время компиляции B.test() перегружает унаследованный A.test() метод

Но затем во время выполнения, A.test() добавляется через mixin, который перезагружает ранее перегруженный метод

Если бы это было не так, вы бы не смогли изменить существующие характеристики класса, используя mixins

то есть (это глупый пример, но я верю, что он понял мою точку зрения):

class AddNotMinus {
  static def minus( int a, int b ) {
     a + b
  }
}

Integer.mixin AddNotMinus
println 10 - 10

печатает 20

...