Groovy动态创建类、方法合成、方法委托
来源:互联网 发布:win7 网络电缆被拔出 编辑:程序博客网 时间:2024/05/20 19:18
/** * 动态生成类 */def expando = new Expando(name : 'hello',fun1:{int a,int b -> a*b})expando.height = 100expando.fun2 = { int a,int b-> a+b}println expando.nameprintln expando.heightprintln 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()
阅读全文
0 0
- Groovy动态创建类、方法合成、方法委托
- Groovy方法拦截,注入,合成,委托和动态类
- Groovy方法
- groovy grails 动态方法一例
- groovy元编程 方法拦截 动态改变
- 委托(5)代理动态方法
- 动态创建对话框方法
- C# 委托代理动态的方法
- Groovy探索之方法调用的动态性
- groovy运行期间动态添加属性和方法
- 动态判定Groovy对象方法和属性是否存在
- groovy运行期间动态添加属性和方法
- 对Groovy运行期动态方法的认识
- 使用cglib动态创建类,添加方法
- 委托方法
- 委托方法
- Groovy main方法
- groovy匕首方法
- 函数去抖和函数节流
- vim多窗口操作-------调整窗口尺寸
- gulp编译报错
- GeoServer中WMS、WFS的区别和请求规范
- linux安装mysql5.7.19
- Groovy动态创建类、方法合成、方法委托
- 区块链大本营的定位宣言——让区块链回归技术和应用的本质
- 基于SpringBoot框架的权限管理系统--sbed
- 在Linux下安装配置蒲公英 私网环境轻松实现异地SSH远程管理
- Android 仿QQ动态背景登录
- 第三方应用调取百度地图、高德地图操作实例导航
- 代码分页
- 告诉各位为如何学习linux系统
- FastDFS分布式文件系统的安装(集群)