设置metaClass后缺少Groovy newInstance()方法

时间:2011-09-26 10:15:18

标签: groovy metaclass

我定义了一个元类

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 个答案:

答案 0 :(得分:1)

我想:

  return super.invokeMethod(object, methodName, arguments)

应该是:

  return super.invokeStaticMethod(object, methodName, arguments)