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

Groovy对象

2019-11-08 02:06:51
字体:
来源:转载
供稿:网友

Groovy对象

在一个Groovy应用中,使用三类对象,POJO(普通java对象)、POGO(Groovy对象,实现GroovyObject接口)和Groovy拦截器(实现GroovyInterceptable)。

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 17delhello

3、对于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


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表