(2.2.9.2)Groovy 中的数据类型
来源:互联网 发布:java final 对象 编辑:程序博客网 时间:2024/05/22 14:34
Groovy 中的数据类型我们就介绍两种和 Java 不太一样的:
一个是 Java 中的基本数据类型。
另外一个是 Groovy 中的容器类。
- 最后一个非常重要的是闭包。
放心,这里介绍的东西都很简单
基本数据类型
作为动态语言,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 个元素的值为 10assert 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?"]
Map 中元素的存取更加方便,它支持多种方法:
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,2,3,4 这 4 个元素 println aRange.fromprintln 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 函数。
- (2.2.9.2)Groovy 中的数据类型
- Groovy数据类型
- Groovy---数据类型
- Groovy数据类型
- 2.2Groovy中的JavaBean
- Groovy Tip 30 BigDecimal数据类型
- (2.2.9)Groovy 介绍
- Groovy 中的闭包
- Groovy 中的类
- Groovy中的Actor模型
- 爬虫中的groovy脚本
- Ofbiz中的.groovy文件
- 关于Groovy中的循环
- Groovy中的集合实用
- Groovy中的闭包
- Groovy中的面向对象
- Ofbiz中的.groovy文件
- 实战 Groovy(3)- Groovy中的SwingBuilder 简介
- Android开发之Bitmap二次采样
- (2.2.9.1)Groovy一些前提知识
- 如何使用Linux的Crontab定时执行PHP脚本的方法
- map和reduce 个数的设定 (Hive优化)经典
- 科技辅导员,信息化助力成长
- (2.2.9.2)Groovy 中的数据类型
- 杭电 1231 1003 最大连续子序列
- 关于SLAM的那些事——通用图优化(G2O)环境搭配(windows8.1 vs2013)
- Solr安装笔记
- 复杂网络数据网站+程序代码网站
- (2.2.9.3)groovy的闭包
- scanf那些事
- 《Motion Design for iOS》(二)
- 怎样修改MFC中应用程序标题的图标?