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
新闻热点
疑难解答