首页 > 学院 > 开发设计 > 正文

Groovy向实例注入方法

2019-11-08 01:55:45
字体:
来源:转载
供稿:网友

Groovy向实例注入方法

每个实例都有一个MetaClass,修改实例的MetaClass可以不影响其他实例。1、使用ExpandoMetaClass向实例注入。
class AGroovyClass {}objA = new AGroovyClass() // 实例对象AobjB = new AGroovyClass() // 实例对象Bemc = new ExpandoMetaClass(AGroovyClass)emc.add = {val1, val2 ->    val1 + val2}emc.initialize()objA.metaClass = emc // 向A注入方法PRintln objA.add(11, 13)try {    objB.add(11, 13) // B中未注入方法,报错} catch (ex) {   println "error"}返回24error2、直接使用metaClass,添加方法。
class AGroovyClass {}objA = new AGroovyClass() // 实例对象AobjB = new AGroovyClass() // 实例对象BobjA.metaClass.add = {val1, val2 ->	val1 + val2	}println objA.add(11, 13)try {    objB.add(11, 13)  // B中未注入方法,报错} catch (ex) {   println "error"}3、metaClass分组。
class AGroovyClass {}obj = new AGroovyClass()obj.metaClass {	add = { ->		"In add function"	}	del = { ->		"In del function"	}}println obj.add() // In add functionprintln obj.del() // In del function4、设置metaClass为null时,仅仅会影响metaClass中添加的方法,类方法不受影响。
class AGroovyClass {	def add() {		"In add function"	}}obj = new AGroovyClass()obj.metaClass {		del = { ->		"In del function"	}}println obj.del() // In del functionobj.metaClass = nullprintln obj.add() // In add functiontry {	println obj.del()} catch(ex) {	println "error" // error}返回In del functionIn add functionerror
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表