Groovy метод newInstance () отсутствует после установки метакласса - PullRequest
1 голос
/ 26 сентября 2011

Я определяю метакласс

class MyMetaClass extends DelegatingMetaClass {
  MyMetaClass(Class theClass){
    super(theClass)
    println theClass
  }
  Object invokeStaticMethod(Object object, String methodName, Object[] arguments) {
    if(methodName == 'save') {
      println 'save method'
      return 
    } else {
      return super.invokeMethod(object, methodName, arguments)
    }
  }
}

и класс A:

class A {
  private String a
  String getA(){
    return a
  }
}

и регистрирую метакласс:

def amc = new MyMetaClass(A)
amc.initialize()
InvokerHelper.metaRegistry.setMetaClass(A, amc)

Теперь я пытаюсь создать экземпляр, используя:

A a2 = A.class.newInstance()

Я получаю сообщение об ошибке:

Caught: groovy.lang.MissingMethodException: No signature of method: A.newInstance() is applicable for argument types: () values: []
at MyMetaClass.invokeStaticMethod(MyMetaClass.groovy:37)
at test.run(test.groovy:139)

В чем причина?Насколько я понимаю, я делегировал другие методы суперклассу, метод newInstance() должен по-прежнему вызываться.

1 Ответ

1 голос
/ 26 сентября 2011

Я думаю:

  return super.invokeMethod(object, methodName, arguments)

Должно быть:

  return super.invokeStaticMethod(object, methodName, arguments)
...