使用 closure 实现接口
interface X
{ void f(); void g(int n); void h(String s, int n); }
x = {Object[] args -> println "method called with $args"} as X
x.f()
x.g(1)
x.h("hello",2)
上面的例子使用 closure实现了接口
method called with null
method called with {1}
method called with {"hello", 2}
使用map 来实现接口
impl = [
i: 10,
hasNext: { impl.i > 0 },
next: { impl.i-- },
]
iter = impl as Iterator
while ( iter.hasNext() )
println iter.next()
输出:
10
9
8
7
6
5
4
3
2
1
这个例子比较勉强,但也可以说明,怎样使用map来实现接口了。
我们不需要实现所有的方法,只需要实现我们要用的就行了,这点跟java很是不同啊,但是如果你去调用一个没有实现方法的时候,就会抛出一个NPE异常。
interface X
{ void f(); void g(int n); void h(String s, int n); }
x = [ f: {println "f called"} ] as X
x.f()
x.g() // NPE here
输出:
f called
Exception thrown: java.lang.IllegalArgumentException
java.lang.IllegalArgumentException
at Script7.run(Script7:6)
这里有一点是需要小心一点的。我们定义map的时候使用的括号是"[]",而不是{}。{}是在使用closure才使用的。
以上的几个例子中,我们使用“as”操作符 来关联我们要实现的接口。其实我们还可以关联到一个 java.lang.Class 的对象上,这时候我们使用 asType方法,下面是一个例子:
def loggerInterface = Class.forName( 'my.LoggerInterface' )
def logger = [
log : { Object[] params -> println "LOG: ${params[0]}"; if( params.length > 1 ) params[1].printStackTrace() },
close : { println "logger.close called" }
].asType( loggerInterface )
分享到:
相关推荐
本文将深入探讨如何基于Groovy实现Java脚本的动态编译、部署和发布,并且介绍如何通过Groovy脚本直接调用Dubbo接口,从而提高开发效率和灵活性。 Groovy是一种基于Java平台的强大的动态编程语言,它具有简洁的语法...
在“groovy脚本实现对数据库的增删改查”这个主题中,我们将深入探讨如何使用Groovy来执行常见的数据库操作。首先,我们需要连接到数据库。在Groovy中,我们可以利用JDBC(Java Database Connectivity)API来实现这...
然后,编写 Groovy 类实现这个接口,例如 HelloWorldServiceImpl 类,该类实现了 sayHello 方法,并返回一个欢迎信息。 在 Spring 配置文件中,需要添加 lang 的名字空间,以便识别 Groovy 脚本。然后,定义一个 ...
通过观看"通过groovy自定义函数实现提取明细表字段至主表字段.mp4"视频教程,我们可以深入学习如何在实际环境中应用这些知识点,逐步构建并优化这个功能。学习和掌握Groovy自定义函数的使用,不仅可以提升工作效率,...
### Groovy实现领域特定语言(DSL)的知识点详解 #### 标题与描述解析 - **标题**: "groovy 一个不错的文档 实现dsl" - **描述**: "groovy 一个不错的文档 实现dsl" 标题与描述均指向了一个关于如何使用Groovy语言...
特色 风控系统, 规则引擎, 动态接口配置(低代码)Groovy DSL 动态规则(rule)执行引擎。DSL(特定领域语言): 开发 和 业务 共识的语言。方便业务表达需求, 方便开发理解业。一个业务需求(一般程序或一个接口)可以抽象...
描述中的省略号可能是由于信息不完整,但在实际的Groovy-all-2.4.7.jar文件中,我们可以预期它将包含以下核心组件: 1. **Groovy Language Runtime**: 这是Groovy的核心,实现了Groovy语法解析、编译和执行。它允许...
Groovy SDK 4.0.3 是一个针对Groovy编程语言的软件开发工具包,它包含了Groovy语言的运行环境和开发所需的各种组件。...通过安装和配置这个SDK,你可以开始探索Groovy的动态世界,体验它在各种应用场景中的强大功能。
通过阅读和分析这些源码,你可以学习到如何设计和实现Groovy类、接口、方法,以及如何利用Groovy的元编程能力。 8. **学习资源**:书籍是获取知识的重要途径,这个包中包含的学习书籍可以帮助初学者快速入门,也...
2. 类与对象:理解Groovy中的类、继承、接口以及元编程概念。 3. 集合与闭包:熟悉Groovy的List、Map等集合操作,以及强大的闭包特性。 4. 文件I/O和网络编程:学习如何使用Groovy进行文件操作和网络通信。 5. 测试...
5. **元编程**:Groovy允许在运行时修改类和对象的行为,这是通过MetaObjectProtocol (MOP) 实现的。例如,可以动态添加方法、属性,或者改变现有方法的行为。 6. **GDK(Groovy Development Kit)**:GDK是Groovy...
Groovy代码示例展示了如何通过更少的代码实现相同的功能,例如在过滤字符串列表的示例中,Groovy使用了更直观的闭包语法,使得代码更为紧凑。 JRuby则是Ruby语言在Java平台上的实现,它完全兼容Ruby语法,为Java...
Groovy是一种动态、灵活的编程语言,它是Java平台上的一个强类型、...通过深入学习和实践这份"Groovy学习资料"中的内容,开发者将能够熟练掌握Groovy语言,并能够将其运用到实际项目中,实现项目的高效开发和顺利上线。
在这个版本中,Groovy继续强化了其与Java的互操作性,并且在并发编程方面进行了优化。 并发编程是现代软件开发中的一个重要领域,尤其是在多核处理器和分布式系统中。Groovy 2.3.2支持Java的并发API,如`java.util....
- 执行和示例:启动程序后,在调试模式下进入断点,然后可以在 "debug" 小窗口中执行 Java 或 Groovy 代码片段。 3. 利用接口执行Groovy脚本 Java 提供了 javax.script 包来支持脚本语言的执行,这包括了对Groovy的...
在Oracle Application Development Framework (ADF) 中,Groovy的运用为开发者提供了更灵活和高效的编码方式,特别是在Business Components (ADF BC) 领域。ADF BC是ADF的核心部分,用于构建数据驱动的应用程序,它...
每个Groovy类都可以有方法和属性,可以继承、实现接口,甚至可以使用多态性。比如,`PingAnGeneral.groovy`和`Jiaotong2015.groovy`可能是定义了不同业务逻辑的类,可能包含了一些通用方法和特定于交通或平安保险的...
5. **闭包**:Groovy中的闭包是其强大的特性之一,它可以作为函数传递,实现函数式编程风格。 6. **GroovyShell和GroovyConsole**:这两个工具是Groovy提供的交互式环境,便于测试和学习Groovy代码。 7. **GDK...
在学习Groovy和Grails的过程中,阅读《Grails参考手册》是非常有价值的。手册通常会详细介绍框架的各个组件、API用法、最佳实践以及示例代码,帮助开发者深入理解并熟练掌握这两个技术。通过深入学习,开发者能够...