国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Groovy方法合成

2019-11-08 01:48:10
字體:
來源:轉載
供稿:網友

Groovy方法合成

方法合成在調用時動態地確定方法的行為。1、在GroovyObject中合成方法,使用methodMissing方法來攔截未定義方法并進行處理。
class AGroovyClass {	def methodMissing(String name, args) {		PRintln "In methodMissing " + name		if (name == "add") {			println "In add function"		}    }}obj = new AGroovyClass()obj.add()obj.del()obj.add()返回In methodMissing addIn add functionIn methodMissing delIn methodMissing addIn add function2、把動態辦法添加到metaClass中,這樣不必每次都進入methodMissing方法中。緩存add方法,第二次調用時直接使用metaClass中add方法,提高了效率。
class AGroovyClass {	def methodMissing(String name, args) {		println "In methodMissing " + name		if (name == "add") {			println "In add function"			def func = {Object[] vargs ->				println "in add func " + vargs			}			AGroovyClass instance = this			instance.metaClass."$name" = func			func(args)		}	}}3、在GroovyInterceptable中合成方法,使用invokeMethod方法來攔截未定義方法并進行處理。每次都先查詢metaClass中是否存在該方法,存在的話直接調用,不存在的再定義。所有的信息都調用System.out.println方法。
class AInterceptable implements GroovyInterceptable {	def invokeMethod(String name, args) {		System.out.println("In invokeMethod " + name) 		def method = metaClass.getMetaMethod(name, args)		if (method) { // 直接進行方法調用			method.invoke(this, args)		} else { // 調用metaClass的invokeMethod方法,會在methodMissing中重新定義。			metaClass.invokeMethod(this, name, args)		}	}	def methodMissing(String name, args) {		System.out.println("In methodMissing " + name)		if (name == "add") {			System.out.println("In add function");			def func = {Object[] vargs ->				System.out.println("in add func " + vargs)			}			AInterceptable instance = this			instance.metaClass."$name" = func			func(args)		}	}}obj = new AInterceptable()obj.add(11)obj.add(11, 12)obj.add("Hello ", "World!")返回In invokeMethod addIn methodMissing addIn add functionin add func [11]In invokeMethod addin add func [11, 12]In invokeMethod addin add func [Hello , World!]4、MetaClass合成
class AGroovyClass {}AGroovyClass.metaClass.methodMissing = {String name, args ->	println "In methodMissing " + name	if (name == "add") {		println "In add function"		def func = {Object[] vargs ->			println "in add func " + vargs		}		AGroovyClass.metaClass."$name" = func		func(args)	}}obj = new AGroovyClass()obj.add(11)obj.add(11, 12)obj.add("Hello ", "World!")返回In methodMissing addIn add functionin add func [11]in add func [11, 12]in add func [Hello , World!]
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 合阳县| 营山县| 黔南| 酉阳| 长治县| 奉化市| 汉寿县| 昭觉县| 景宁| 荥阳市| 云阳县| 轮台县| 南投县| 陕西省| 嵊州市| 翁源县| 湘潭市| 六盘水市| 霍山县| 陆川县| 长葛市| 绥棱县| 乌兰浩特市| 彝良县| 精河县| 得荣县| 根河市| 永城市| 新民市| 临潭县| 玛沁县| 随州市| 彭泽县| 乌海市| 武邑县| 德昌县| 武胜县| 托克逊县| 静乐县| 麻阳| 上虞市|