引用一个官方例子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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。