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

4.13.           如何使用Expando类?

Expando类从根本上说是一种动态的bean,它使您可在运行时动态增加属性以外,还可以动态地增加闭包(closure)。下面通过具体的例子进行说明,如清单4.32

 

清单 4.32 Expando的应用

def author = new Expando()

assert author.books == null

author.books = ['Book 1']

assert author.books == ['Book 1']

author.writeBook = { -> return author.books += 'Book ' + (author.books.size() + 1) }

author.writeBook()

assert author.books == ['Book 1','Book 2']

author.writeBook()

assert author.books == ['Book 1','Book 2', 'Book 3']

 

本例中,闭包可访问Expando对象的所有属性,如果调用闭包,它会立即被执行。向Expando对象中增加闭包相对于向对象中增加动态方法。

你可能感兴趣的:(bean,grails,groovy)