我定义了一个元类
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()
方法仍然可以调用。
答案 0 :(得分:1)
我想:
return super.invokeMethod(object, methodName, arguments)
应该是:
return super.invokeStaticMethod(object, methodName, arguments)