引用一个官方例子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