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

你可能感兴趣的:(groovy)