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:为接口委派元类?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
概述使用Groovy的包名约定,我可以拦截对 Java方法的Groovy方法调用,如下所示: package groovy.runtime.metaclass.org.myGang.myPackageclass FooMetaClass extends groovy.lang.DelegatingMetaClass{ FooMetaClass(MetaClass delegate) 使用Groovy的包名约定,我可以拦截对 Java方法的Groovy方法调用,如下所示:
赞
(0)
打赏
微信扫一扫
支付宝扫一扫
groovy – 使用Jenkins DSL添加参数“为复制工件构建选择器”
上一篇
2022-06-06
Groovy Eclipse插件组织进口
下一篇
2022-06-06
评论列表(0条)