Groovy:为接口委派元类?

Groovy:为接口委派元类?,第1张

概述使用Groovy的包名约定,我可以拦截对 Java方法的Groovy方法调用,如下所示: package groovy.runtime.metaclass.org.myGang.myPackageclass FooMetaClass extends groovy.lang.DelegatingMetaClass{ FooMetaClass(MetaClass delegate) 使用Groovy的包名约定,我可以拦截对 Java方法的Groovy方法调用,如下所示:

package groovy.runtime.Metaclass.org.myGang.myPackageclass FooMetaClass extends groovy.lang.DelegatingMetaClass{    FooMetaClass(MetaClass delegate)    {        super(delegate);    }    public Object getProperty(Object a,String key)    {        return a.someMethod(key)    }}@H_502_12@  

如果我真的创建了类Foo的对象,这可以正常工作:

def myFoo = new Foo()def fooProperty = myFoo.bar // Metaclass invokes myFoo.someMethod("bar")@H_502_12@  

但是如果Foo是一个接口,我想拦截方法调用它的任何实现呢?

def myFoo = FooFactory.create()   // I don't kNow what class this will befooProperty = myFoo.bar@H_502_12@  

有没有一种方法可以实现这一点,而不需要为每个已知的接口实现提供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)}@H_502_12@                            	          总结       

以上是内存溢出为你收集整理的Groovy:为接口委派元类?全部内容,希望文章能够帮你解决Groovy:为接口委派元类?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1231515.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存