}
//直接给类注入方法 String.metaClass.get = { delegate.toString().toURL().text } println "https://www.baidu.com/".get() //给类注入静态方法 def str = "https://www.baidu.com/" String.metaClass.'static'.printClass = { println delegate } String.printClass() //注入构造函数 String.metaClass.constructor = { Calendar calendar-> new String(calendar.getTime().toString()) } println new String(Calendar.instance) //多方法一起注入 String.metaClass{ get = { delegate.toString().toURL().text } 'static'{ printlnClass = { println delegate } } constructor = { Calendar calendar-> new String(calendar.getTime().toString()) } } //另一种写法 def emc = new ExpandoMetaClass(String) emc.get = { delegate.toString().toURL().text } emc.initialize() String.metaClass = emc println str.get() println String.metaClass //groovy.lang.ExpandoMetaClass //制空 回到最开始 就调用不到get方法了 String.metaClass = null println String.metaClass // groovy.runtime.HandleMetaClass//混合方法注入 class Get{ def get(String url){ url.toString().toURL().text } } //String.mixin(Get) String.metaClass.mixin(Get) println "".get("https://www.baidu.com/")