13.3Groovy向具体的实例(对象)中注入方法,使不同的对象有不同的方法(神奇不)
来源:互联网 发布:h3c网管软件 编辑:程序博客网 时间:2024/05/16 03:00
// 类class Person { def play() { println 'playing...' }}// 创建个EMC实例def emc = new ExpandoMetaClass(Person)// 注入到EMC实例emc.sing = { -> 'on baby baby...'}// 初始化EMC实例emc.initialize()def jack = new Person() // 杰克def paul = new Person() // 保罗// 注入对象的方法(每个对象都有MetaClass)jack.metaClass = emcprintln jack.sing()try { paul.sing() //保罗没有此方法} catch (e) { println e}
运行结果:
on baby baby...
groovy.lang.MissingMethodException: No signature of method: learn.Person.sing() is applicable for argument types: () values: []
Possible solutions: find(), find(groovy.lang.Closure), is(java.lang.Object), any(), any(groovy.lang.Closure), print(java.lang.Object)
有简单的实现方法,不用创建EMC实例,直接在对象的MetaClass上扩展方法。结果一样。
// 类class Person { def play() { println 'playing...' }}def jack = new Person() // 杰克def paul = new Person() // 保罗// 注入方法jack.metaClass.sing = { -> 'oh baby baby...'}println jack.sing()try { println paul.sing() // 保罗无此方法} catch (e) { println e}// 注销方法jack.metaClass = nulltry { jack.play() // 预先定义的方法(非注入的方法),仍然可以使用 jack.sing() // 已经注销,再调用报异常} catch (e) { println e}
阅读全文
0 0
- 13.3Groovy向具体的实例(对象)中注入方法,使不同的对象有不同的方法(神奇不)
- 每个类有很多方法,每个对象的类型不同
- 不同List中的值放入对象的方法实例
- 不同的浏览器创建ajax引擎对象的方法不同
- Hibernate区分不同对象的方法
- 不同浏览器创建 XMLHttpRequest 对象的方法
- Hibernate区分不同对象的方法
- Java中创建对象的5种不同方法
- Java中创建对象的5种不同方法
- Java中创建对象的5种不同方法
- java中Integer对象不同创建方法之间的区别
- Java中创建对象的5种不同方法
- Java中创建对象的5种不同方法
- 设计模式:策略模式(对象的某个行为,在不同的场景中,有不同的实现算法)
- Python中静态方法 类方法 实例方法的不同
- 关于用代码实例化对象与xib实例化文件调用方法的不同
- Spring Controller 如何对不同对象中相同的属性名注入不同的值
- JAVA中如何取出两个不同List对象(对象一致)中所有不同的对象的集合
- python中的单继承
- 进制
- Spring3MVC通过SpringContextUtil获取上下文(与不使用对比)
- OpenCV实践之路——人脸识别之三识别自己的脸
- Tensorflow实战学习(四十三)【TF.Learn 机器学习Estimator,DataFrame,监督器Monitors】
- 13.3Groovy向具体的实例(对象)中注入方法,使不同的对象有不同的方法(神奇不)
- python中的多继承
- Android Canvas画图形(更新中)
- android studio 启动DDMS时报错Java was started but returned exit code=13
- 第11周 【项目5
- The import java.util.Base64 cannot be resolved问题
- [VMware][CentOS]磁盘扩容操作
- python方法重写
- 树莓派实现 “IP网络损伤仪”