GroovyObject接口。
package groovy.lang;public interface GroovyObject { Object invokeMethod(String name, Object args); Object getPRoperty(String propertyName); void setProperty(String propertyName, Object newValue); MetaClass getMetaClass(); void setMetaClass(MetaClass metaClass);}GroovyInterceptable接口。package groovy.lang;public interface GroovyInterceptable extends GroovyObject {}Groovy方法調(diào)用順序。

1、對(duì)于POJO來說,MetaClass上的方法優(yōu)于原先的方法。
def val = new Integer(3)println val.toString() // 3Integer.metaClass.toString = {-> "Integer toString" }println val.toString() // Integer toString2、對(duì)于GroovyInteceptable來說,不管改方法存不存在,都會(huì)調(diào)用invokeMethod方法。不能使用println方法,同樣會(huì)被攔截。
class AInterceptable implements GroovyInterceptable { def add(val1, val2) { val1 + val2 } public Object invokeMethod(String name, Object args) {// println name System.out.println(name) System.out.println(args.join(" ")) }}def interceptable = new AInterceptable()interceptable.add(13, 17)interceptable.del("hello")返回add13 17delhello3、對(duì)于GroovyObject來說
(1)查看方法是否存在MetaClass或原有類中。
class AGroovyClass { def fun1() { println "fun1" } def methodMissing(String name, args) { println "methodMissing " + name }}obj = new AGroovyClass()obj.fun1() // fun1obj.fun2() // methodMissing fun2obj.metaClass.fun2 = { -> println "fun2" }obj.fun2() // fun2(2)查看屬性為該名稱的閉包class AGroovyClass { def fun1 = { -> println "fun1 closure" } def fun2 = { -> println "fun2 closure" } def fun1() { println "fun1" } def methodMissing(String name, args) { println "methodMissing " + name }}obj = new AGroovyClass()obj.fun1() // fun1def fun = obj.fun1fun() // fun1 closureobj.fun2() // fun2 closureobj.fun3() // methodMissing fun3(3)查看methodmissing方法
class AGroovyClass { def methodMissing(String name, args) { println "methodMissing " + name } def invokeMethod(String name, args) { println "invokeMethod " + name }}obj = new AGroovyClass()obj.fun1() // methodMissing fun1(4)查看invokeMethod方法。class AGroovyClass { def invokeMethod(String name, args) { println "invokeMethod " + name }}obj = new AGroovyClass()obj.fun1() // invokeMethod fun1
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注