首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络技术 > 网络基础 >

Groovy and Grails Recipes通译之旅——面向对象的Groovy(17)

2012-10-27 
Groovy and Grails Recipes翻译之旅——面向对象的Groovy(17)?4.17.?如何使用ExpandoMetaClass类给类添加行

Groovy and Grails Recipes翻译之旅——面向对象的Groovy(17)

?

4.17.?如何使用ExpandoMetaClass类给类添加行为?

Groovy中有一个特殊的元类ExpandoMetaClass,它能帮助您随时给一个类增加额外的方法和属性。而该类的所有实例都会获得这些增加的方法和属性。清单4.36演示了如何给String类增加一个方法,实现字符串的首字母大写。

?

清单4.36 给类增加额外的方法

String.metaClass.capitalize = {->???

if (delegate.size() == 0) return ""

??? if (delegate.size() == 1) return delegate.toUpperCase()

??? return delegate[0].toUpperCase() + delegate[1..delegate.length() - 1]

}

?

assert "hello there".capitalize() == "Hello there"

assert "".capitalize() == ""

assert "s".capitalize() == "S"

?

注意,由于性能的原因,ExpandoMetaClass默认地不支持继承。然而,您可调用ExpandoMetaClass.enbleGlobally()实现。

热点排行