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

Groovy的EMC注入

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

Groovy的EMC注入

1、通过往类的MetaClass中添加方法,可以向类中注入方法。
class AGroovyClass {}obj = new AGroovyClass()AGroovyClass.metaClass.add = {val1, val2 -> val1 + val2 }try {	obj.add(11, 13)} catch (ex) {	PRintln "error" // add方法添加在obj初始化之后,obj没有add方法}println new AGroovyClass().add(11, 13) // 24println new AGroovyClass().add("Hello ", "World!") // Hello World!2、如果父类的metaClass中注入了该方法,子类中也能调用。
class AGroovyClass {}class A extends AGroovyClass {}class B extends AGroovyClass {}AGroovyClass.metaClass.add = {val1, val2 -> val1 + val2 }println new A().add(11, 13) // 24println new B().add("Hello ", "World!") // Hello World!3、静态方法注入,使用static关键字。
class AGroovyClass {}AGroovyClass.metaClass.'static'.add = {val1, val2, -> val1 + val2 }println AGroovyClass.add(11, 13) // 24println AGroovyClass.add("Hello ", "World!") // Hello World!4、构造方法注入,添加一个构造函数,使用<<操作符。覆盖一个构造函数,使用=操作符。在添加的构造函数内一定返回一个AGroovyClass对象。
class AGroovyClass {	AGroovyClass() {		println "AGroovyClass construct"	}}// 使用<<AGroovyClass.metaClass.constructor << { int val ->	println "AGroovyClass construct(integer)"	new AGroovyClass()}new AGroovyClass(1)// 需要使用=AGroovyClass.metaClass.constructor = { 	println "AGroovyClass construct()"	con = AGroovyClass.class.getConstructor(null)	con.newInstance(null)}new AGroovyClass()返回AGroovyClass construct(integer)AGroovyClass constructAGroovyClass construct()AGroovyClass construct5、EMC分组语法,整合所有的方法。
class AGroovyClass {    AGroovyClass() {        println "AGroovyClass construct"    }}AGroovyClass.metaClass {    add = {val1, val2 ->        val1 + val2    }    'static' {        add = { val1, val2, val3 -> val1 + val2 + val3 }        del = { -> "in del function" }    }    constructor = { int val ->        println "AGroovyClass construct(integer)"        new AGroovyClass()    }    constructor = {         println "AGroovyClass construct()"        con = AGroovyClass.class.getConstructor(null)        con.newInstance(null)    }}new AGroovyClass(1)println new AGroovyClass().add(11, 13)println AGroovyClass.add(11, 13, 15)println AGroovyClass.del()返回AGroovyClass construct(integer)AGroovyClass construct()AGroovyClass constructAGroovyClass construct()AGroovyClass construct2439in del function
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表