Groovy 中的数据类型我们就介绍两种和 Java 不太一样的:
放心,这里介绍的东西都很简单
基本数据类型
作为动态语言,Groovy 世界中的所有事物都是对象。所以,int,boolean 这些 Java 中的基本数据类型,在 Groovy 代码中其实对应的是它们的包装数据类型。比如 int 对应为 Integer,boolean 对应为 Boolean。比如下图中的代码执行结果:
容器类
Groovy 中的容器类很简单,就三种:
- List:链表,其底层对应 Java 中的 List 接口,一般用 ArrayList 作为真正的实现类。
- Map:键-值表,其底层对应 Java 中的 LinkedHashMap。
- Range:范围,它其实是 List 的一种拓展。
对容器而言,我们最重要的是了解它们的用法。下面是一些简单的例子:
1.List 类
变量定义:List 变量由[]定义,比如
def aList = [5,'string',true] //List 由[]定义,其元素可以是任何对象
变量存取:可以直接通过索引存取,而且不用担心索引越界。如果索引超过当前链表长度,List 会自动 往该索引添加元素
assert aList[1] == 'string' assert aList[5] == null //第 6 个元素为空 aList[100] = 100 //设置第 101 个元素的值为 10 assert aList[100] == 100
那么,aList 到现在为止有多少个元素呢?
println aList.size ===>结果是 101
2.Map 类
容器变量定义
变量定义:Map 变量由[:]定义,比如
def aMap = ['key1':'value1','key2':true]
Map 由[:]定义,注意其中的冒号。冒号左边是 key,右边是 Value。key 必须是字符串,value 可以是任何对象。另外,key 可以用''或""包起来,也可以不用引号包起来。比如
def aNewMap = [key1:"value",key2:true] //其中的 key1 和 key2 默认被
处理成字符串"key1"和"key2" 不过 Key 要是不使用引号包起来的话,也会带来一定混淆,比如
def key1="wowo" def aConfusedMap=[key1:"who am i?"] aConfuseMap 中的 key1 到底是"key1"还是变量 key1 的值“wowo”?显然,答案是字符串"key1"。如果要是"wowo"的话,则 aConfusedMap 的定义必须设置成: def aConfusedMap=[(key1):"who am i?"]
println aMap.keyName <==这种表达方法好像 key 就是 aMap 的一个成员变量一样 println aMap['keyName'] <==这种表达方法更传统一点 aMap.anotherkey = "i am map" <==为 map 添加新元素
3.Range 类
Range 是 Groovy 对 List 的一种拓展,变量定义和大体的使用方法如下:
def arange = 1..5 <==Range 类型的变量 由 begin 值+两个点+end 值表示 左边这个 arange 包含 1,2,3,4,5 这 5 个值
如果不想包含最后一个元素,则
def arangeWithoutEnd = 1..<5 <==包含 1,4 这 4 个元素 println arange.from println arange.to
Groovy API 的一些秘笈
前面讲这些东西,主要是让大家了解 Groovy 的语法。实际上在 coding 的时候,是离不开 SDK 的。由于 Groovy 是动态语言,所以要使用它的 SDK 也需要掌握一些小诀窍。
Groovy 的 API 文档位于 <a rel="nofollow" href="http://www.groovy-lang.org/api.html" "="" style="Box-sizing: border-Box; color: rgb(45,133,202); text-decoration: none; background-color: transparent;">http://www.groovy-lang.org/api.html
以上文介绍的 Range 为例,我们该如何更好得使用它呢?
- 先定位到 Range 类。它位于 groovy.lang 包中:
有了 API 文档,你就可以放心调用其中的函数了。不过,不过,不过:我们刚才代码中用到了 Range.from/to 属性值,但翻看 Range API 文档的时候,其实并没有这两个成员变量。图 6 是 Range 的方法
文档中并没有说明 Range 有 from 和 to 这两个属性,但是却有 getFrom 和 getTo 这两个函数。What happened?原来:
根据 Groovy 的原则,如果一个类中有名为 xxyyzz 这样的属性(其实就是成员变量),Groovy 会自动为它添加 getXxyyzz 和 setXxyyzz 两个函数,用于获取和设置 xxyyzz 属性值。
注意,get 和 set 后第一个字母是大写的
所以,当你看到 Range 中有 getFrom 和 getTo 这两个函数时候,就得知道潜规则下,Range 有 from 和 to 这两个属性。当然,由于它们不可以被外界设置,所以没有公开 setFrom 和 setTo 函数。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。