【Groovy】MOP 元对象协议与元编程 ( Expando 动态类 | 创建动态类 | 为动态类增加字段和方法 )
【摘要】
文章目录
一、Expando 动态类简介二、动态类创建三、为动态类增加字段和方法四、完整代码示例
一、Expando 动态类简介
Groovy 运行时 , 可以动态...
一、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!!
文章来源: hanshuliang.blog.csdn.net,作者:韩曙亮,版权归原作者所有,如需转载,请联系作者。
原文链接:hanshuliang.blog.csdn.net/article/details/122691339
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)