读书人

Groovy and Grails Recipes通译之旅

发布时间: 2012-10-27 10:42:26 作者: rapoo

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()实现。

读书人网 >网络基础

热点推荐