加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Groovy动态改变对象能力(metaClass)

发布时间:2020-12-14 17:02:36 所属栏目:大数据 来源:网络整理
导读:引用一个官方例子swapCase来展示一下Groovy是如何增强既有类的能力的 (演示如何使用delegate,注意演示的是final类:String) String.metaClass.swapCase? = ?{ - ??????def?sb? = ? new ?StringBuffer() ?????? // ?delegate与this类似,引用当前正被‘改

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读