国产探花免费观看_亚洲丰满少妇自慰呻吟_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!]
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 高阳县| 丰台区| 大同县| 获嘉县| 望谟县| 汪清县| 古蔺县| 万盛区| 临桂县| 扶沟县| 南通市| 桃源县| 洪泽县| 琼结县| 海盐县| 香港| 娄底市| 肇源县| 读书| 康乐县| 沛县| 衡南县| 瑞丽市| 锡林郭勒盟| 沅江市| 平塘县| 盐山县| 大庆市| 长岭县| 西华县| 柘城县| 徐汇区| 宁阳县| 武夷山市| 那坡县| 邹城市| 新民市| 巫山县| 运城市| 湘潭县| 麦盖提县|