【Groovy】编译时元编程 ( 编译时元编程引入 | 声明需要编译时处理的类 | 分析 Groovy 类的 AST 语法树 )

简介: 【Groovy】编译时元编程 ( 编译时元编程引入 | 声明需要编译时处理的类 | 分析 Groovy 类的 AST 语法树 )

一、编译时元编程引入


在之前的 " 【Groovy】MOP 元对象协议与元编程 " 系列博客中 , 都是围绕 MetaClass 的 " 运行时元编程 " , 其在运行时才进行相关的元编程操作 , 如方法注入 , 方法委托等 ;


在编译时也可以进行元编程操作 ;


在 Java 和 Android 中 , 可以使用 注解处理器 AbstractProcessor 实现 APT 编译时技术 , 参考 【Android APT】 专栏 ;


在 Groovy 中实现的编译时技术 , 类似于 Java 中的编译时技术 ;


二、声明需要编译时处理的类


声明一个 Student 类 , 在其中定义成员变量和成员方法 ; 之后需要在编译时处理该类 ;


class Student{
    def name
    def hello(){
        println "hello"
    }
}

三、分析 Groovy 类的 AST 语法树


参考 【Groovy】Groovy 环境搭建 ( 下载 Groovy | 安装 Groovy | 配置 Groovy 环境变量 ) 博客 , 配置环境变量后 , 执行


groovyConsole


命令 , 启动 Y:\001_DevelopTools\024_Groovy\groovy-4.0.0\bin\groovyConsole.bat 程序 , 如果在 Linux 中启动的是 groovyConsole 可执行文件 ;

image.png

启动后 , 弹出 GroovyConsole 工具如下 :

image.png

向其中拷贝 Student 类代码 ,

class Student{
    def name
    def hello(){
        println "hello"
    }
}


选择 GroovyConsole 工具菜单栏 Script 下的 Inspect AST 选项 , 分析上述 Student 类的 AST 语法树 ;

image.png

分析结果在 Groovy AST Browser 对话框中显示 ;

image.png

目录
相关文章
|
存储 监控 Java
JVMTI 在淘宝 Profiler 中的应用(下)
JVMTI 在淘宝 Profiler 中的应用(下)
460 6
|
4月前
|
存储 人工智能 网络协议
为什么NAS需要内网穿透,如何给自建NAS做内网穿透
内网穿透是一种解决外网访问内网服务的技术,通过公网服务器中转或直连方式,实现对家中的NAS、摄像头等设备的远程访问。文章详细介绍了内网与外网的区别、NAS为何需要内网穿透,以及两种主要实现方式:端口转发和P2P直连。同时列举了常见工具如NAT123、FRP、Ngrok和Infortress,分别适合不同技术基础的用户。总结指出,内网穿透让远程访问变得便捷,而相关工具则降低了使用门槛,让更多人受益于这项技术。
|
Web App开发 人工智能 API
工具推荐:一款强大的AI翻译插件
工具推荐:一款强大的AI翻译插件
1455 0
工具推荐:一款强大的AI翻译插件
|
6月前
|
监控 数据库
【YashanDB 知识库】ycm 托管数据库时报错 OM host ip:127.0.0.1 is not support join to YCM
在托管数据库时,若 OM 的 IP 被设置为 127.0.0.1,将导致无法托管至 YCM,并使数据库失去监控。此问题源于安装时修改了 OM 的监听 IP。解决方法包括:将 OM 的 IP 修改为本机实际 IP 或 0.0.0.0,同时更新 env 文件及 yasom 后台数据库中的相关配置。经验总结指出,应避免非必要的后台 IP 修改,且数据库安装需遵循规范,不使用仅限本机访问的 IP(如 127.0.0.1)。
|
8月前
|
机器学习/深度学习 人工智能 自然语言处理
国产AI神器Deepseek,本地离线使用教程!
国产AI神器Deepseek,本地离线使用教程!
927 14
|
域名解析 缓存 网络协议
【域名解析DNS专栏】深入理解DNS根服务器与顶级域服务器
【5月更文挑战第24天】DNS的根服务器和顶级域服务器在域名解析中起关键作用。根服务器是核心,负责提供顶级域服务器引用,维护顶级域列表;顶级域服务器管理如.com的域名,处理二级域名解析和管理。这两者影响解析速度、可靠性和安全性。了解它们有助于优化DNS配置和提升网站访问体验。
1101 1
【域名解析DNS专栏】深入理解DNS根服务器与顶级域服务器
|
12月前
|
存储 Java API
动态代理实现的两种方式
【10月更文挑战第10天】
165 2
|
12月前
|
存储 NoSQL 安全
GEO类型
【10月更文挑战第9天】
162 0
|
SQL 缓存 分布式计算
【Hive】Hive的两张表关联,使用MapReduce怎么实现?
【4月更文挑战第16天】【Hive】Hive的两张表关联,使用MapReduce怎么实现?
|
Android开发 虚拟化 异构计算
一文搞定Android VSync机制来龙去脉
一文搞定Android VSync机制来龙去脉
883 0