Groovy:为接口委派元类?
发布时间:2020-12-14 16:28:06 所属栏目:大数据 来源:网络整理
导读:使用Groovy的包名约定,我可以拦截对 Java方法的Groovy方法调用,如下所示: package groovy.runtime.metaclass.org.myGang.myPackageclass FooMetaClass extends groovy.lang.DelegatingMetaClass{ FooMetaClass(MetaClass delegate) { super(delegate); } pu
使用Groovy的包名约定,我可以拦截对
Java方法的Groovy方法调用,如下所示:
package groovy.runtime.metaclass.org.myGang.myPackage class FooMetaClass extends groovy.lang.DelegatingMetaClass { FooMetaClass(MetaClass delegate) { super(delegate); } public Object getProperty(Object a,String key) { return a.someMethod(key) } } 如果我真的创建了类Foo的对象,这可以正常工作: def myFoo = new Foo() def fooProperty = myFoo.bar // metaclass invokes myFoo.someMethod("bar") 但是如果Foo是一个接口,我想拦截方法调用它的任何实现呢? def myFoo = FooFactory.create() // I don't know what class this will be fooProperty = myFoo.bar 有没有一种方法可以实现这一点,而不需要为每个已知的接口实现提供DelegatingMetaClass? 解决方法
您可以创建一个名为“groovy.runtime.metaclass.CustomMetaClassCreationHandle”的类来全局处理元类创建过程.
在这个类中,您可以覆盖此方法: protected MetaClass createNormalMetaClass(Class theClass,MetaClassRegistry registry) { // if theClass instanceof Foo,return your special metaclass // else return super.createNormalMetaClass(theClass,registry) } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |