【Groovy】MOP 元对象协议与元编程 ( 通过 MetaMethod#invoke 执行 Groovy 方法 )
2023-09-14 09:07:29 时间
一、通过 MetaMethod#invoke 执行 Groovy 方法
已经定义 Groovy 类 Student , 并创建该类对象 ;
class Student {
def name;
def hello() {
println "Hello ${name}"
}
}
def student = new Student(name: "Tom")
通过 MetaMethod#invoke 执行 Groovy 方法 :
首先 , 获取 Groovy 对象的 MetaClass ,
student.getMetaClass()
然后 , 调用 MetaClass#getMetaMethod 方法 获取 MetaMethod 对象 ,
MetaMethod metaMethod = student.getMetaClass().getMetaMethod("name", null)
最后 , 调用 MetaMethod#invoke 方法 , 执行获取的 MetaMethod 对应的 Groovy 方法 ;
metaMethod.invoke(student, null)
二、完整代码示例
完整代码示例 :
class Student {
def name;
def hello() {
println "Hello ${name}"
}
}
def student = new Student(name: "Tom")
// 直接调用 hello 方法
student.hello()
// 通过 GroovyObject#invokeMethod 调用 hello 方法
// 第二个参数是函数参数 , 如果为 void 则传入 null
student.invokeMethod("hello", null)
// 获取 元方法
MetaMethod metaMethod = student.getMetaClass().getMetaMethod("name", null)
// 执行元方法
metaMethod.invoke(student, null)
执行结果 :
Hello Tom
Hello Tom
Hello Tom
相关文章
- MySQL截取字符串的方法-substring_index
- 小程序 消息推送配置token无效(解决方法)订阅消息
- linux系添加路由,Linux添加路由的两种方法「建议收藏」
- 2022-11-13:以下go语言代码中,如何获取结构体列表以及结构体内的指针方法列表?以下代码应该返回{"S1":["M1",
- 【Android NDK 开发】JNI 线程 ( JNI 线程创建 | 线程执行函数 | 非 JNI 方法获取 JNIEnv 与 Java 对象 | 线程获取 JNIEnv | 全局变量设置 )
- 【Groovy】MOP 元对象协议与元编程 ( GroovyObject 接口简介 | MetaClass 简介 | 使用 GroovyObject#invokeMethod 执行类方法 )
- 【Groovy】MOP 元对象协议与元编程 ( 使用 Groovy 元编程进行函数拦截 | 动态拦截函数 | 动态获取 MetaClass 中的方法 | evaluate 方法执行Groovy脚本 )
- 【Groovy】MOP 元对象协议与元编程 ( 方法合成 | 动态注入方法 )
- MongoDB用Mongoose得到的对象不能增加属性完美解决方法(两种)
- Linux中查看线程资源的技术方法(linux查看线程资源)
- JSP application.getResourceAsStream()方法:返回指定资源的输入流对象
- Java Connection.close()方法:关闭Connection对象
- JSP PageContext.removeAttribute()方法:移除指定范围对象中的属性
- JSP Response.getAttributeNames()方法:获取session对象的所有属性名称
- JSP Response.getServletContext()方法:返回session所属的ServletContext对象
- Spring queryForObject方法:查询的结果以对象类型返回
- JS valueOf()方法:返回对象的值
- Linux系统下部署Redis的方法(linux部署redis)
- 利用Oracle存储过程赋值的简易方法(oracle存储过程赋值)
- MSSQL中读取数据的简单方法(mssql 读取数据)
- MySQL配置文件详解ini文件的作用和使用方法(mysql中.ini文件)
- MySQL下载遇到未响应该怎么办快速解决方法(mysql下载过程未响应)
- 使用Oracle删除存储对象的方法(oracle中删除对象)
- Asp生成HTML方法大全
- windows中PHP5.2.14以及apache2.2.16安装配置方法
- jQueryUIDatepickerlength为空或不是对象错误的解决方法
- php模板中出现空行解决方法
- javascript中onmouse事件在div中失效问题的解决方法
- javascript检测对象中是否存在某个属性判断方法小结
- JavaScript中Math对象方法使用概述
- IE浏览器IFrame对象内存不释放问题解决方法
- Python深入学习之特殊方法与多范式