/** * 动态生成类 */ def expando = new Expando(name : 'hello',fun1:{int a,int b -> a*b}) expando.height = 100 expando.fun2 = { int a,int b-> a+b } println expando.name println expando.height println expando.fun1(2,6) println expando.fun2(2,6) /** * 方法合成 */ class MyPerson{ def methodMissing(String name, def args) { println 'missing' if (name.startsWith('play')){ //生成的class文件 调用方式不一样 // println metaClass MyPerson p = this // println p.metaClass p.metaClass."$name" = { println "invoke $name" } "$name"(args) } return null } } def p = new MyPerson() p.playGame() p.playGame() /** * 方法委托 */ class Work1{ def fun(){ println('work1') } } class Work2{ def fun2(){ println('work2') } } class WorkManager{ { delegate(Work1,Work2) } def delegate(Class... classes){ def objects = classes.collect{it.newInstance()} WorkManager workManager = this workManager.metaClass.methodMissing = { String name,def args-> def object = objects.find{it.respondsTo(name,args)} if(object){ //动态注入方法 workManager.metaClass."$name" = { object.invokeMethod(name,args) } invokeMethod(name,args) } } } } def wm = new WorkManager() wm.fun() wm.fun2() //第二种方法 groovy自带的注解 class WorkManager1{ @Delegate Work1 work1 = new Work1() @Delegate Work2 work2 = new Work2() } new WorkManager1().fun() new WorkManager1().fun2()
Groovy动态创建类、方法合成、方法委托
最新推荐文章于 2025-08-15 11:44:44 发布
本文通过具体示例介绍了Groovy语言中动态生成类的方法、方法合成及方法委托的使用技巧,展示了Groovy灵活强大的动态特性。
1429

被折叠的 条评论
为什么被折叠?



