Skip to end of metadata
Go to start of metadata

ExpandoMetaClass - 动态方法/属性名创建

由于Groovy允许你使用字符串作为方法名,相应的它也允许你在运行时动态的创建方法名和属性名。

基本原理

仅仅使用Groovy的属性名应用作为字符串的特性就可以用一个动态的名字创建一个方法。你可以结合Groovy的字符串注入 (Gstrings) 快速的创建方法和属性名。

静态的方法和属性也是同样的原理。

一个更复杂的例子

在Grails中我们有动态编码解码器的概念,类可以编码和解码数据。

这些类叫做HTMLCodec,JavaScriptCodec等等。下面是一个可以看得见的例子:

那么我们要对这些类所做的就是求得转换结果,并添加基于编码解码类名称首部的"encodeAsXXX"方法至每一个对象,比如"encodeAsHTML"。下面是达到这个目的伪代码

正如你从上面所看到的,我们用GString表达式动态的构造了方法的名称。

  • No labels