Groovy探索 自定义Range 一 一个简单的自定义Range类
这将是一个系列的文字,用来扩展我们对于自定义Range类的使用思路。也许我们在Groovy语言的编码不知不觉的使用到了Range类,甚至没有觉察到它的存在;或者我们在Groovy语言的编码过程中,常常惊叹于使用Range类的方便,但仅仅是惊叹而已,我们没有付之行动;或者我们想在实际编码中使用自定义的Range类,但却找不到使用它的适当地方。等等,所有这些,希望在读完我们的这个系列后,我们能够将被动的使用Range类,转化为主动的使用我们自定义的Range类。
Groovy语言引入的一个重要概念就是Range。有了Range,我们可以写出形如下面的样子的代码来:
(1..10).each{
print it
}
println ''
运行结果为:
12345678910
我们在Groovy语言的代码中,到处都可以找到Range的身影。使用起来非常的方便,在这里我们就不多说了。
Groovy语言除了给我们引入了Range的概念,还有一个革新之处是我们可以自定义Range。能够自定义Range类,我们肯定是欢迎的,因为在初始化一个集合类对象的时候,我们使用List或数组,需要把它们的所有元素都实例化出来,然后放到容器里;而我们在使用Range的时候,只需要实例化首尾两个元素,就可以获取到集合类对象。当然是极大的方便了我们。
多说无凭,我们还是先来看看一个自定义Range类的例子吧。
这个例子说的是,一个部门有五个科室,我们需要遍历所有科室的情况。
要自定义一个Range类,我们要做的工作首先是让这个类实现"Comparable"接口,然后在该类里依次实现"next"、"previous"和"compareTo"方法即可。当然,这些方法都是Range类对象用来遍历用的,非实现不可。
现在来看我们自定义的科室代码:
class Section implements Comparable{
def SECTION_TYPE = ['Yike','Erke','Sanke','Sike','Wuke']
private index = 0
public Section(type)
{
this.index = SECTION_TYPE.indexOf(type)
}
Section next()
{
new Section(SECTION_TYPE[(index+1)%SECTION_TYPE.size()])
}
Section previous()
{
new Section(index-1)
}
int compareTo(Object other)
{
index<=>other.index
}
public String toString()
{
SECTION_TYPE[index]
}
}
整个类也十分的简单,"SECTION_TYPE"用来定义科室的代码,以便Range类对象能够自动实例化一个科室。
"index"变量是用来在遍历时确定位置的。
"next"方法是用来往后遍历,"previous"方法是用来往前遍历,"compareTo"方法用来比较两个元素的位置。这都是Range类必须实现的方法。
在所有的自定义Range类中,它们的实现逻辑都大同小异。
而"toString"方法才是科室类自己的方法,当然,我们可以在科室类里定义很多科室类要用到的其他方法,在本例中,为了简单起见,就不再多定义其他方法了。
下面,我们就可以来测试这个自定义的Range类了:
def yike = new Section('Yike')
def wuke = new Section('Wuke')
(yike..wuke).each{
println it.toString()
}
运行的结果为:
Yike
Erke
Sanke
Sike
Wuke
我们再回过头来看测试代码,在代码中,我们只初始化了两个科室对象,如下所示:
def yike = new Section('Yike')
def wuke = new Section('Wuke')
就可以进行五个对象的遍历了。如果我们使用List对象,那么代码将是下面的这个样子的:
def list = [new Section('Yike'),
new Section('Erke'),
new Section('Sanke'),
new Section('Sike'),
new Section('Wuke')]
list.each{
println it.toString()
}
这个很简单的例子当然初步的显示了自定义Range类的优越性,但是自定义的Range类绝不止这么简单,它还有更为广阔的舞台。
这将是本系列文字的下一个部分将要说到的。
分享到:
相关推荐
通过groovy自定义函数实现提取明细表字段至主表字段,同时根据表单上的字段进行计算,将计算结果在字段上显示;致远、groovy
groovy代码-range
groovy 一个不错的文档 实现dsl
Groovy 调用 Java 类groovy 调用 Java class 十分方便,只需要在类前导入该 Java 类,在 Groovy 代码中就可以无缝使用该
Groovy是Java平台的一个崭新的语言,它为Java带来了许多使Ruby流行的特征。《Groovy in Action》是Groovy编程的综合指南,它向Java开发者介绍了...Groovy专家可以获得一个对他们进行全面和创造性Groovy探索的可靠参考。
虽然 Groovy 的语法源于 Smalltalk 和 Ruby 这类语言的理念,但是可以将它想像成 Java 语言的一种更加简单、表达能力更强的变体。(在这点上,Ruby 与 Groovy 不同,因为它的语法与 Java 语法差异很大。) 许多 Java...
groovy的简单例子
gstorm, 在groovy脚本中,一个用于数据库和CSV文件的简单 ORM GStorm - Groovy单个表 ORMGStorm是一个轻量级的持久性 helper,允许你在没有任何样板代码的情况下持久化数据。 它也可以充当CSV文件的和 ORM 。示例...
一些groovy的实例代码,需要的朋友就赶紧下载吧
Groovy入门]第一讲.项目演示与搭建Groovy开发环境 还有第二讲,可能有点大床不上来了,尽力
Spock 是适合 Java 和 Groovy 应用程序的一个测试框架
通过groovy自定义函数实现提取明细表字段至主表字段.zip
Groovy是一种基于JVM(Java虚拟机)的敏捷开发语言,它结合了Python、Ruby和Smalltalk的许多强大的特性,Groovy 代码能够与 Java 代码很好地结合,也能用于扩展现有代码。由于其运行在 JVM 上的特性,Groovy 可以...
Groovy入门经典是一个唯一能够扩展Java平台的脚本语言,内容全面详尽,浅显易懂,易于选择性阅读。可以作为对Groovy语言感兴趣的计算机软件开发人员的参考书。需要的朋友们就赶紧来下载试试吧! Groovy提供类似...
AndroidGroovyDemo (GradleApplication)演示如何在 android studio 上使用 groovy 开发演示如何用 groovy 自定义 DSLwhy groovyyou know. 懒~ ^_^android + groovy 整合SwissKnife 整合致谢:本项目的 java 源代码...