
引用一个官方例子swapCase来展示一下Groovy是如何增强既有类的能力的(演示如何使用delegate,注意演示的是final类:String)
String.MetaClass.swapCase = {->
def sb = new StringBuffer()
// delegate与this类似,引用当前正被‘改造’的对象
delegate.each {
sb << (Character.isUpperCase(it as char) ? Character.tolowerCase(it as char) :
Character.toupperCase(it as char))
}
sb.toString()
}
String s = "Hello, world!"
println s.swapCase()
hELLO, WORLD!
说明:<<用于添加方法(如果方法已经存在,会发生groovy.lang.GroovyRuntimeException异常),=用于添加方法或覆盖既有方法
更加简洁的方法:
String.MetaClass {
'static' {
value = {
it.toString()
}
}
swapCase = { ->
def sb = new StringBuffer()
// delegate与this类似,引用当前正被‘改造’的对象
delegate.each {
sb << (Character.isUpperCase(it as char) ? Character.tolowerCase(it as char) :
Character.toupperCase(it as char))
}
sb.toString()
}
}
String s = 'Hello, world!'
println s.swapCase()
println String.value(new Date())
运行结果:
hELLO, WORLD! Sun Jun 08 14:53:28 CST 2008
以上是内存溢出为你收集整理的Groovy动态改变对象能力(metaClass)全部内容,希望文章能够帮你解决Groovy动态改变对象能力(metaClass)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)