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方法调用顺序。
1、对于POJO来说,MetaClass上的方法优于原先的方法。
def val = new Integer(3)println val.toString() // 3Integer.metaClass.toString = {-> "Integer toString" }println val.toString() // Integer toString2、对于GroovyInteceptable来说,不管改方法存不存在,都会调用invokeMethod方法。不能使用println方法,同样会被拦截。
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、对于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
新闻热点
疑难解答