在大多数情况下,给不是自己的定义的类中增加额外的方法是非常有用的。为此Groovy从Objective-C借鉴了这一特性,称之为Categories. 在当前的系统中,已经有一些categories了,将这些功能加入到类中,将在Groovy的环境中更加有用。
第一个category允许你将DOM对象看作arrays和maps,因此你可以以Groovy的路径表达式语言(Groovy path expression language,GPATH)来使用,将其看作是JavaBeans. 这里有一个使用DOMCategory测试的示例:
DOMTest.groovy
import groovy.xml.* def html = DOMBuilder.newInstance().html { head { title (class:'mytitle', 'Test') } body { p (class:'mystyle', 'This is a test.') } } use (groovy.xml.dom.DOMCategory) { assert html.head.title.text() == 'Test' assert html.body.p.text() == 'This is a test.' assert html.find{ it.tagName == 'body' }.tagName == 'body' assert html.getElementsByTagName('*').grep{ it.'@class' }.size() == 2 } try { html.head } catch(MissingPropertyException mpe) { println "Categories wear off" }