GroovyMOP 元对象协议与元编程 ( Expando 动态类 | 创建动态类 | 为动态类增加字段和方法 )
Posted 韩曙亮
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GroovyMOP 元对象协议与元编程 ( Expando 动态类 | 创建动态类 | 为动态类增加字段和方法 )相关的知识,希望对你有一定的参考价值。
文章目录
一、Expando 动态类简介
Groovy 运行时 , 可以动态地创建一个类 , 该类称为 " 动态类 " ;
这个类运行前并不存在 , 没有通过 class 定义该类 , 而是在 运行时通过代码创建的 ;
Groovy 提供了一个 groovy.util.Expando 类 , 该类专门用于创建 " 动态类 " ;
Expando 动态类原型如下 :
package groovy.util;
/**
* 表示一个动态可扩展的bean。
*/
public class Expando extends GroovyObjectSupport
// 动态类 属性 , 封装在该映射集合 Map 中
private Map expandoProperties;
public Expando()
public Expando(Map expandoProperties)
this.expandoProperties = expandoProperties;
二、动态类创建
Expando 构造函数可以接受键值对作为参数 ,
public class Expando extends GroovyObjectSupport
// 动态类 属性 , 封装在该映射集合 Map 中
private Map expandoProperties;
public Expando(Map expandoProperties)
this.expandoProperties = expandoProperties;
如果要在动态类中设置 name 属性 , 在构造函数中传入
name: "Tom",
参数即可 , 如果为动态类设置 hello 方法 , 在构造函数中传入
hello:
println "Hello!"
参数 ;
代码示例 :
// 创建动态类
def student = new Expando(
// 动态类属性
name: "Tom",
// 动态类成员方法
hello:
println "Hello!"
)
三、为动态类增加字段和方法
在动态类创建完毕之后 , 使用
动态类.属性名 = 属性值
的方式 , 为动态类增加属性 ,
// 为动态类增加属性
student.age = 18
使用
动态类.方法名 = 闭包
的方式 , 为动态类增加方法 ;
// 为动态类增加方法
student.hello2 =
println "Hello2!!"
代码示例 :
// 创建动态类
def student = new Expando(
// 动态类属性
name: "Tom",
// 动态类成员方法
hello:
println "Hello!"
)
// 为动态类增加属性
student.age = 18
// 为动态类增加方法
student.hello2 =
println "Hello2!!"
四、完整代码示例
完整代码示例 :
// 创建动态类
def student = new Expando(
// 动态类属性
name: "Tom",
// 动态类成员方法
hello:
println "Hello!"
)
// 为动态类增加属性
student.age = 18
// 为动态类增加方法
student.hello2 =
println "Hello2!!"
// 打印动态类字段
println student.name
println student.age
// 调用动态类方法
student.hello()
student.hello2()
执行结果 :
Tom
18
Hello!
Hello2!!
以上是关于GroovyMOP 元对象协议与元编程 ( Expando 动态类 | 创建动态类 | 为动态类增加字段和方法 )的主要内容,如果未能解决你的问题,请参考以下文章
GroovyMOP 元对象协议与元编程 ( 方法注入 | 使用 Category 分类进行方法注入的优缺点 )
GroovyMOP 元对象协议与元编程 ( 方法合成引入 | 类内部获取 HandleMetaClass )
GroovyMOP 元对象协议与元编程 ( 方法注入 | 使用 ExpandoMetaClass 进行方法注入 )
GroovyMOP 元对象协议与元编程 ( 方法注入 | 使用 MetaClass 进行方法注入构造方法 )