首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Groovy 使用Builder AST 转换为流式API

Groovy 2.3开始,我们可以使用@Builder AST转换轻松地为我们的类创建一个流畅的API。 我们可以将注释应用于我们的类,结果类文件将具有支持流畅API的所有必要方法。...但是如果我们的类需要从Java中使用,那么为Java开发人员提供一个流畅的API来为我们的Groovy类做很好。 在下面的示例中,我们将@Builder注释应用于具有一些属性的简单类Message。...} @Builder AST转换还检查@Canonical AST转换是否应用于类。 对于生成的构建器代码,还包括或排除在@Canonical转换中定义的任何包含或排除的属性。...默认的prefix设置为set,但如果我们想要,我们可以更改: import groovy.transform.builder.Builder import groovy.transform.builder.SimpleStrategy...assert message.body == 'Groovy rocks!'

96350
您找到你想要的搜索结果了吗?
是的
没有找到

GroovyGroovy 脚本调用 ( Groovy 类中调用 Groovy 脚本 | 创建 GroovyShell 对象并执行 Groovy 脚本 | 完整代码示例 )

文章目录 一、Groovy 类中调用 Groovy 脚本 1、创建 GroovyShell 对象并执行 Groovy 脚本 2、代码示例 二、完整代码示例 1、调用者 Groovy 脚本的类 2、被调用者...Groovy 脚本 3、执行结果 一、Groovy 类中调用 Groovy 脚本 ---- 1、创建 GroovyShell 对象并执行 Groovy 脚本 首先 , 创建 GroovyShell 对象...脚本对应的 File 文件对象 ; def file = new File("Script.groovy") 最后 , 调用 GroovyShell 对象的 evaluate 方法 , 执行 Groovy...脚本 ; shell.evaluate(file) 2、代码示例 代码示例 : class Test { void startScript() { // 注意这里创建 groovy.lang.Binding...") shell.evaluate(file) } } new Test().startScript() 二、完整代码示例 ---- 1、调用者 Groovy 脚本的类 class

1.4K10

Groovy】编译时元编程 ( ASTTransformation#visit 方法简介 | org.codehaus.groovy.ast.ModuleNode 脚本节点 )

文章目录 一、ASTTransformation#visit 方法简介 二、org.codehaus.groovy.ast.ModuleNode 脚本节点 一、ASTTransformation#visit...) 中 , 写的进行 Groovy 编译时处理 ASTTransformation 如下 : import org.codehaus.groovy.ast.ASTNode import org.codehaus.groovy.control.SourceUnit..., SourceUnit source 参数代表源码 ; 二、org.codehaus.groovy.ast.ModuleNode 脚本节点 ---- ASTNode[] nodes 参数是 AST...语法树节点 , 该数组的值是 [org.codehaus.groovy.ast.ModuleNode@2609b277] AST 语法树节点是 org.codehaus.groovy.ast.ModuleNode...类型对象 ; org.codehaus.groovy.ast.ModuleNode 是 Groovy 脚本的语法树节点 ; 其内部封装的 List classes = new LinkedList

20010

Groovy】编译时元编程 ( 利用注解进行 AST 语法树转换 | 定义注解并使用 GroovyASTTransformationClass 注明 AST 转换接口 | AST 转换接口实现 )

文章目录 一、利用注解进行 AST 语法树转换 1、定义注解并使用 GroovyASTTransformationClass 注明 AST 转换接口 2、AST 转换接口实现 3、定义 Groovy...类并使用 @Compile 注解修饰需要拦截的方法 4、执行结果 一、利用注解进行 AST 语法树转换 ---- 1、定义注解并使用 GroovyASTTransformationClass 注明 AST...转换接口实现 然后 , 实现 MyASTTransformation 类 , 该类继承 ASTTransformation 接口 ; import org.codehaus.groovy.ast.ASTNode...import org.codehaus.groovy.ast.builder.AstBuilder import org.codehaus.groovy.ast.stmt.BlockStatement...import org.codehaus.groovy.control.SourceUnit import org.codehaus.groovy.transform.ASTTransformation

43320

GroovyGroovy 方法调用 ( Groovy 构造函数中为成员赋值 | Groovy 函数的参数传递与键值对参数 | 完整代码示例 )

文章目录 一、Groovy 构造函数中为成员赋值 二、Groovy 函数的参数传递与键值对参数 三、完整代码示例 一、Groovy 构造函数中为成员赋值 ---- Groovy 类没有定义构造函数 ,...但是可以使用如下形式的构造函数 , 为 Groovy 类设置初始值 ; new 类名(成员名1: 成员值1, 成员名2: 成员值2) 顺序随意 : 成员的顺序随意 , 没有强制要求 , 只需要 成员名...函数的参数传递与键值对参数 ---- 在 Groovy 的构造函数中 , 可以使用 成员名1: 成员值1, 成员名2: 成员值2 类型的参数 , 这是键值对 map 类型的集合 ; 但是对于普通的函数...b: 18 是第一个参数 , 这是一个 map 集合 // 第二个参数是 "Jerry" 字符串 student.printValue(a: "Tom", b: 18, "Jerry") 三、完整代码示例...---- 完整代码示例 : class Student { def name def age def printValue(a, b) { println "

9.1K20

Groovy 类型检查扩展,最终篇 高级类型检查扩展

Groovy 类型检查扩展,第二篇 使用扩展 37. Groovy 类型检查扩展,第一篇 编写类型检查扩展 2.1 预编译的类型检查扩展 在前面两篇文章中的所有示例都使用类型检查脚本。...对于这个特殊示例,一个可能的解决方案是指示编译器使用混合模式编译。更高级的方法是在类型检查期间使用AST转换,但这种方法要复杂地多。...类型检查不应该修改AST树,因为我们将无法保证没有@TypeChecked注释的代码在没有注释的情况下行为相同。...这就是为什么不建议从类型检查扩展和AST转换开始使用这种方法的原因。 2.8 示例 现实生活中类型检查扩展的例子很容易找到。...示例地址为: https://github.com/apache/groovy/tree/master/subprojects/groovy-templates/src/main/groovy/groovy

88420

GroovyGroovy 脚本调用 ( Groovy 配置文件格式 | Groovy 配置文件读取 | 完整配置文件及解析代码示例 )

文章目录 前言 一、Groovy 配置文件格式 二、Groovy 配置文件读取 二、完整配置文件及解析代码示例 前言 在 Groovy 脚本 , Groovy 类 , Java 类中 , 可以调用 Groovy...脚本 ; 一、Groovy 配置文件格式 ---- Groovy 中的配置文件 , 也是定义在 " .groovy " 脚本中的 ; 下面的写法 , student { name = "Tom...) 之后可以使用 config.节点名称.键 的形式 , 读取配置文件 ; 如使用 config.student.name 形式 , 读取 student 下的 name 属性配置 ; 代码示例...student 整个配置 println "student : " + config.student 二、完整配置文件及解析代码示例 ---- 配置文件 : student { name =...address = "Beijing" name = "School" } home{ address = "Beijing" } } 解析配置文件代码示例

79540

GroovyGroovy 扩展方法 ( 扩展静态方法示例 | 扩展实例方法示例 | 扩展实例方法与扩展静态方法代码相同 )

文章目录 一、扩展静态方法示例 二、扩展实例方法示例 三、扩展实例方法与扩展静态方法代码相同 一、扩展静态方法示例 ---- 在上一篇博客 【GroovyGroovy 扩展方法 ( Groovy 扩展方法引入...| 分析 Groovy 中 Thread 类的 start 扩展方法 ) 中 , 分析 Thread 的扩展方法 start 方法 , 该方法调用如下 , Thread.start { } 这个为 Thread...start(Thread self, Closure closure) { return createThread(null, false, closure); } 二、扩展实例方法示例...InputStream 实例对象 , 该实例对象可以调用 getText 扩展方法 ; InputStream inputStream inputStream.getText() 使用 InputStream 类无法调用...getText() 方法 ; 这说明 为 InputStream 扩展的 getText 方法 , 是一个 实例方法 , 只有实例对象能调用该扩展方法 , 类无法调用该扩展方法 ; 查看为 InputStream

90030

Groovy】编译时元编程 ( ASTTransformation#visit 方法中访问 Groovy 类、方法、字段、属性 | 完整代码示例及进行编译时处理的编译过程 )

文章目录 一、ASTTransformation#visit 方法中访问 Groovy 类、方法、字段、属性 二、完整代码示例及进行编译时处理的编译过程 1、Groovy 脚本 Groovy.groovy...对象 , 用于访问 Groovy 的每个类 ; GroovyClassVisitor 对象中 , 提供了访问 类 、成员字段 、成员方法 、属性 、 构造函数的回调方法 ; 代码示例 : import...org.codehaus.groovy.ast.ASTNode import org.codehaus.groovy.ast.ClassNode import org.codehaus.groovy.ast.ConstructorNode...import org.codehaus.groovy.ast.FieldNode import org.codehaus.groovy.ast.GroovyClassVisitor import org.codehaus.groovy.ast.MethodNode...import org.codehaus.groovy.ast.ClassNode import org.codehaus.groovy.ast.ConstructorNode import org.codehaus.groovy.ast.FieldNode

82320

Groovy】编译时元编程 ( ASTTransformation#visit 方法获取 Groovy 源文件 )

文章目录 一、ASTTransformation#visit 方法获取 Groovy 源文件 二、完整代码示例 1、Groovy 脚本 Groovy.groovy 2、ASTTransformation...Groovy 源文件 ---- 在 ASTTransformation#visit 方法中 , 使用 source.AST 也可以获取 AST 语法树根节点 , 使用 source.source.reader.text...可以和获取 Groovy 类源码的字符串形式 ; AST 语法树根节点 ASTNode[] nodes : [org.codehaus.groovy.ast.ModuleNode@2609b277]...源码 SourceUnit source : org.codehaus.groovy.control.SourceUnit@1fd14d74 使用 source.AST 获取 AST 语法树根节点 :...脚本 , Groovy 类 , Groovy 方法 , 字段 , 属性 相关的数据 ; 二、完整代码示例 ---- 1、Groovy 脚本 Groovy.groovy class Student{

27610

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

文章目录 一、编译时元编程引入 二、声明需要编译时处理的类 三、分析 Groovy 类的 AST 语法树 一、编译时元编程引入 ---- 在之前的 " 【Groovy】MOP 元对象协议与元编程 " 系列博客中...类的 AST 语法树 ---- 参考 【GroovyGroovy 环境搭建 ( 下载 Groovy | 安装 Groovy | 配置 Groovy 环境变量 ) 博客 , 配置环境变量后 , 执行...groovyConsole 命令 , 启动 Y:\001_DevelopTools\024_Groovy\groovy-4.0.0\bin\groovyConsole.bat 程序 , 如果在 Linux...def name def hello(){ println "hello" } } 选择 GroovyConsole 工具菜单栏 Script 下的 Inspect AST...选项 , 分析上述 Student 类的 AST 语法树 ; 分析结果在 Groovy AST Browser 对话框中显示 ;

49640

Groovy 类型检查扩展,第二篇 使用扩展

除了GroovyTypeCheckingExtensionSupport和StaticTypeCheckingVisitor提供的功能外,类型检查DSL脚本还从org.codehaus.groovy.ast.ClassHelper...例如,在上面的findByName示例中,只需要知道findByName不会在运行时失败,并且它返回一个域类。...此外,必须能够处理常规类型检查器无法处理的情况,例如前向引用: point a(1,1) line a,b // b是事后引用的!...,或者此时无法检查赋值是否有效,仍然可以稍后进行检查……这是一个非常强大的功能。...确定将新作用域推入堆栈的切入点,并在此作用域中初始化自定义变量 使用各种事件,可以使用存储在自定义范围中的信息来执行检查、延迟检查…… 确定退出范围的切入点,调用scopeExit并最终执行额外的检查 2.8 其他有用的方法 要获得

61720

Groovy】编译时元编程 ( 编译时方法拦截 | 在 MyASTTransformation#visit 方法中进行方法拦截 )

文章目录 一、在 MyASTTransformation#visit 方法中进行方法拦截 二、完整代码示例及进行编译时处理的编译过程 1、Groovy 脚本 Groovy.groovy 2、ASTTransformation...ArrayList(); 成员 , 这里面就是该 MethodNode 节点中的方法内容 , 将该集合清空 , 就相当于将方法体清空了 , 实现了方法拦截操作 ; 二、完整代码示例及进行编译时处理的编译过程...import org.codehaus.groovy.ast.ASTNode import org.codehaus.groovy.ast.builder.AstBuilder import org.codehaus.groovy.ast.stmt.BlockStatement...最后 , 依赖 test.jar 执行 Groovy.groovy 脚本 groovy -classpath test.jar Groovy.groovy 执行结果为 : [org.codehaus.groovy.ast.ModuleNode...@7d7758be] org.codehaus.groovy.control.SourceUnit@2bdd8394 org.codehaus.groovy.ast.ModuleNode@7d7758be

37720

Groovy】编译时元编程 ( 编译时方法注入 | 使用 buildFromSpec、buildFromString、buildFromCode 进行方法注入 )

进行方法注入 2、使用 new AstBuilder().buildFromString 进行方法注入 3、使用 new AstBuilder().buildFromCode 进行方法注入 二、完整代码示例及进行编译时处理的编译过程...import org.codehaus.groovy.ast.ASTNode import org.codehaus.groovy.ast.builder.AstBuilder import org.codehaus.groovy.ast.stmt.BlockStatement...最后 , 依赖 test.jar 执行 Groovy.groovy 脚本 groovy -classpath test.jar Groovy.groovy 执行结果为 : [org.codehaus.groovy.ast.ModuleNode...@7d7758be] org.codehaus.groovy.control.SourceUnit@2bdd8394 org.codehaus.groovy.ast.ModuleNode@7d7758be...@16ce702d] org.codehaus.groovy.control.SourceUnit@7b94089b org.codehaus.groovy.ast.ModuleNode@16ce702d

31320

Groovy 面向对象编程-注解学习

(url='zinyan.com')@ZinyanName(name='zinyan')@AnnotationCollector@interface Zinyan {} 默认情况下,替换注解时,它们将获得别名中定义的注解参数值...因此,Groovy不是试图抢先一种正确的方法来处理重复注解问题,而是让我们编写自己的自定义元注解处理器(下面将介绍),并让我们在AST转换中编写任何我们喜欢的检查逻辑,这是聚合的常见目标。...示例如下: package demo.zinyan.groovy.processor import groovy.transform.CompileStatic import groovy.transform.TypeCheckingModeimport...org.codehaus.groovy.ast.AnnotatedNodeimport org.codehaus.groovy.ast.AnnotationNodeimport org.codehaus.groovy.ast.ClassHelperimport...org.codehaus.groovy.ast.ClassNodeimport org.codehaus.groovy.ast.expr.ClassExpressionimport org.codehaus.groovy.ast.expr.PropertyExpressionimport

71320
领券