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