Groovy:为接口委托元类?
Posted
技术标签:
【中文标题】Groovy:为接口委托元类?【英文标题】:Groovy: Delegating metaclass for an Interface? 【发布时间】:2010-10-07 07:22:31 【问题描述】:使用 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 的情况下实现这一点?
【问题讨论】:
【参考方案1】:您可以创建一个名为“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)
【讨论】:
以上是关于Groovy:为接口委托元类?的主要内容,如果未能解决你的问题,请参考以下文章