【Groovy】MOP 元对象协议与元编程 ( Expando 动态类 | 创建动态类 | 为动态类增加字段和方法 )
文章目录
- 一、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!!
【Groovy】MOP 元对象协议与元编程 ( Expando 动态类 | 创建动态类 | 为动态类增加字段和方法 )相关推荐
- 【Groovy】MOP 元对象协议与元编程 ( 方法委托 | 批量方法委托 )
文章目录 一.批量方法委托 二.完整代码示例 一.批量方法委托 在上一篇博客 [Groovy]MOP 元对象协议与元编程 ( 方法委托 | 正常方法调用 | 方法委托实现 | 代码示例 ) 中 , 将 ...
- 【Groovy】MOP 元对象协议与元编程 ( 方法注入 | 使用 @Mixin 注解进行方法注入 | Mixin 混合多个类优先级分析 )
文章目录 一.使用 Mixin 混合进行方法注入 二.Mixin 混合多个类优先级分析 一.使用 Mixin 混合进行方法注入 在上一篇博客 [Groovy]MOP 元对象协议与元编程 ( 方法注入 ...
- 【Groovy】MOP 元对象协议与元编程 ( 方法注入 | 使用 ExpandoMetaClass 进行方法注入 )
文章目录 一.使用 ExpandoMetaClass 进行方法注入 三.完整代码示例 一.使用 ExpandoMetaClass 进行方法注入 在 [Groovy]MOP 元对象协议与元编程 ( 方法 ...
- 【Groovy】MOP 元对象协议与元编程 ( 方法注入 | 使用 Category 分类进行方法注入的优缺点 )
文章目录 一.使用 Category 分类进行方法注入的优点 二.使用 Category 分类进行方法注入的缺点 一.使用 Category 分类进行方法注入的优点 之前的博客 [Groovy]MOP ...
- 【Groovy】MOP 元对象协议与元编程 ( Groovy 类内部和外部分别获取 metaClass | 分析获取 metaClass 操作的字节码 | HandleMetaClass 注入方法 )
文章目录 一.Groovy 类内部和外部分别获取 metaClass 二.分析 Groovy 类内部和外部获取 metaClass 操作的字节码 三.使用 HandleMetaClass 注入方法 一 ...
- 【Groovy】MOP 元对象协议与元编程 ( 方法注入 | 同时注入普通方法、静态方法、构造方法 )
文章目录 一.同时注入普通方法.静态方法.构造方法 二.完整代码示例 一.同时注入普通方法.静态方法.构造方法 如果要同时为 Groovy 类注入大量方法 , 使用 Category 分类 或 Met ...
- 【Groovy】MOP 元对象协议与元编程 ( 方法注入 | 分析使用 MetaClass 进行方法注入前后 mateClass 类型变化 )
文章目录 一.分析使用 MetaClass 进行方法注入前后 mateClass 类型变化 二.完整代码示例 一.分析使用 MetaClass 进行方法注入前后 mateClass 类型变化 打印下面 ...
- 【Groovy】MOP 元对象协议与元编程 ( 方法注入 | 使用 Mixin 混合进行方法注入 )
文章目录 一.使用 Mixin 混合进行方法注入 二.完整代码示例 一.使用 Mixin 混合进行方法注入 使用 Mixin 混合进行方法注入 , 为下面的 Student 类注入方法 ; class ...
- 【Groovy】MOP 元对象协议与元编程 ( 方法注入 | 使用 MetaClass 注入静态方法 )
文章目录 一.使用 MetaClass 注入静态方法 二.完整代码示例 一.使用 MetaClass 注入静态方法 使用 MetaClass 注入静态方法 , 可以使用如下代码实现 : 类名.meta ...
最新文章
- 威纶通触摸屏与单片机MODBUS_威纶通案例集锦51-55
- shell的嵌入命令大全
- 《HeadFirst设计模式》笔记
- windows dos 常用命令
- ERROR: Command errored out with exit status 1:
- 织梦cms生成首页html的php文件,织梦DedeCMS定时自动生成首页HTML的实现方法
- JDK 18 / Java 18 GA 发布
- leetcode —— 75. 颜色分类
- mysql 时间计算函数_MySQL时间计算函数DATE_SUB()用法简介说明
- c语言线性顺序表,C语言程序——线性顺序表.doc
- IIS和tomcat共用80端口
- Debian 中使用apt-get update 出现NO_PUBKEY 解决方法
- 局域网计算机加密共享文件,局域网共享文件,小编教你局域网共享文件怎么加密...
- 分析11年21部漫威电影,一览导演、主演、口碑票房最佳......
- Android武林大会(转)
- html格式错误检测,HTML格式错误
- python .npy 存取 dict
- C# winform 打印预览
- woo语言一行代码批量修改文件名称
- 利用js制作一个简单的QQ农场小游戏