(1)GroovyBean
Groovy很像JavaBean,不过省略了显示声明的获取和设置方法,提供了自动构造方法,并允许你用点号(.)引用成员变量。
class Character { private int strLength private int wisdom } def pc=new Character(strLength:10,wisdom:20) pc.strLength=30 println "STRLENGTH=["+pc.strLength+"] WISDOM=["+pc.wisdom+"]" 输出为: STRLENGTH=[30] WISDOM=[20](2)安全解引用操作符
Groovy引入了安全解引用运算符,用?.符号帮你去掉一些套路化的"如果对象为null"检查代码。在使用这个符号时,Groovy引入了一个特殊的null结构,表示“什么也不做”,而不是真的引用null。
class Person { private String name; private Integer age; } people=[null,new Person(name:"billLee",age:55)] for(Person person:people) { println person?.name+" age="+person?.age } 输出: null age=null billLee age=55(3)猫王操作符
用猫王操作符(?:)可以把带有默认值的if/else结构写的及其短小。用猫王操作符不用检查null,也不用重复变量。
String agentStatus="Active" String status=agentStatus?:"Inactive" 结果: Result: Active(4)增强型字符串
Groovy有一个String类的扩展类GString,它比Java中标准的String强,也更灵活。
GString必须用双引号定义。对于开发人员来说,使用它最大的好处是可以包含可在运行时计算的表达式(用${})。如果GString随后被转换为普通字符串(比如传给了println),GString中的表达式都会被替换为其计算结果。
String name="bill lee"; def dist=3*9; String str="${name} and dist = ${dist}" Result: bill lee and dist = 27GString的底层并不是Java中的String!尤其不应该把GString作为映射中的键,或者比较它们是否相等,结果是不可预料的。
(5)函数字面值
函数字面值表示一个可以当做值传递的代码块,也可以像操作任何值一样操作。可以当做参数传递给方法,可以给变量赋值。
传统实现:
class StringUtils { static String sayHello(String name) { if(name=="Tom"||name=="Jerry") { "Hello Cat and Mouse "+name+"!" } else { "Hello funs "+name+" !" } } } println StringUtils.sayHello("Tom") println StringUtils.sayHello("bsr1983") 输出: Hello Cat and Mouse Tom! Hello funs bsr1983 !函数字面值实现
def sayHello= { name->if(name=="Tom"||name=="Jerry") "Hello Cat and Mouse "+name+"!" else "Hello funs "+name+" !" } println sayHello("Tom") println sayHello("bsr1983") 输出与上面的传统实现一样(6)内置的集合操作
each:遍历集合,对其中每一项应用函数字面值
collect:收集在集合中每一项上应用函数字面值的返回结果(相当于其他语言map/reduce中的map函数)
inject:用函数字面值处理集合并构建返回值(相当于其他语言map/reduce的reduce函数)
findAll:找到集合中所有与函数字面值匹配的元素
max:返回集合中的最大值
min:返回集合中的最小值
示例代码:
moviesTitle=["Seven","SnowWhite","Die Hard"] moviesTitle.each({x->println x}) 输出 Seven SnowWhite Die Hard moviesTitle=["Seven","SnowWhite","Die Hard"] moviesTitle.each({println it})it变量可以用在单参的函数字面值中。
(7)对正则表达式的内置支持
~:创建一个模式(创建一个编译的Java Pattern对象)
=~:创建一个匹配器(创建一个Java Matcher对象)
==~:计算字符串(相当于在Pattern上调用Java match()方法)
示例代码
def pattern=/1010/ def input="1010" def matcher=input =~ pattern if(input==~ pattern) { input=matcher.replaceFirst("0101") println input } 输出 0101 ("billlee 31"=~/(\w+) (\d+)/).each{full,name,age->println "$name is $age year old"} 输出 billlee is 31 year old(8)简单的XML处理
Groovy有构建器的概念,用Groovy原生语法可以处理任何树型结构的数据,包括HTML、XML和JSON。
1.创建XML
def writer=new StringWriter() def xml=new groovy.xml.MarkupBuilder(writer) xml.person(id:2) { name "billlee" age 31 } println writer.toString(); 输出 <person id='2'> <name>billlee</name> <age>31</age> </person>2.创建Json
def builder=new groovy.json.JsonBuilder() def root=builder.people{ person { name "billlee" age 31 } } println builder.toString() println builder.toPrettyString() def s=new StringWriter() builder.writeTo(s) println s.toString() 输出: {"people":{"person":{"name":"billlee","age":31}}} { "people": { "person": { "name": "billlee", "age": 31 } } } {"people":{"person":{"name":"billlee","age":31}}}3.解析XML
Groovy有几种解析XML输入的办法。
XMLParser:支持XML文档的GPath表达式
XMLSlurper:跟XMLParser类似,但以懒加载的方式工作
DOMCategory:用一些语法支持DOM的底层解析
示例代码:
class XmlExample{ static def PERSON= """ <person id='2'> <name>billlee</name> <age>31</age> </person> """ } class Person{def id;def name;def age} def xmlPerson=new XmlParser().parseText(XmlExample.PERSON) Person p=new Person(id:xmlPerson.@id, name:xmlPerson.name.text(), age:xmlPerson.age.text()) println "id=${p.id} name=${p.name} age=${p.age}" 输出 id=2 name=billlee age=31 注:"""是Groovy中用来定义跨行字符串的。
相关推荐
Groovy 学习笔记 Groovy 学习笔记
Groovy
Groovy学习笔记,内容如下: 1.概念 2.基本语法 3.字符串 4.集合 5.类和闭包 6.控制语句 7.操作符重载 8.I/O操作 9.高级应用 10.正则表达式
对Groovy开发环境设置,基本语法做了简单明了的介绍
图文并茂,适合入门新手,涵盖了基本的语法讲解及一些DEMO测试,值得一看
NULL 博文链接:https://rsljdkt.iteye.com/blog/859059
Groovy语法&Gradle配置学习笔记
第1章 数字和字符串 第2章 List的简单介绍 第3章 String的特殊用法 第4章 闭包 第5章 集合+闭包 第6章 Map和Range 第7章 函数
NULL 博文链接:https://xiajs.iteye.com/blog/1871551
本笔记详细记载从本人入门学习到案例操作的所有详细过程,中有截图,与源码对照,不管是初学者还是对其需要研究的人都能是一本难得的资料,欢迎下载,下期我将提供最新的项目实战NOTE,并会时时更新.....
这是groovy的学习笔记和入门级别的文档教程 共享下载 希望对学习grails 和 groovy的人有帮助
Groovy是一种基于JVM(Java虚拟机)的敏捷开发语言,它结合了Python、Ruby和Smalltalk的许多强大...本套资源中包含了:Groovy轻松入门 ,Groovy中文教程, Groovy用户指南, Groovy学习笔记,Groovy官方demo,五本书!
Grails入门指南第二版学习笔记,有需要的同学可以看一下。
Clojure学习笔记 为什么要学习Clojure 我写Java也有10多年了,其间用过Python、PHP、Ruby、Groovy、JS等动态语言。Java相对C、C++来说有明显的优势,可以说是一种更高级的语言,高级语言带来的优势是能用更少的代码...
springboot学习笔记 spring基础 Spring概述 Spring的简史 xml配置 注解配置 java配置 Spring概述 Spring的模块 核心容器CoreContainer Spring-Core Spring-Beans ...
Struts 2.1.8 学习源码内容 Struts2_01FirstDemo : 跑通第一个Struts2的实例 Struts2_02CURD : 关于Struts2的增、删、改和查 实际业务中数据来自数据库,从DAO层查询,本实例使用静态资源的方式模拟, 主要是关于...
学习Gradle前,需要有一个Groovy语言的基础,以免被Groovy的语法困扰,反而忽略了Gradle的知识。先明确两个概念,projects和tasks,它们是Gradle中的两个重要概念。任何一个Gradle构建,都是由一个或多个projects...
使用 2D 和 3D 信息进行实物学习和识别 学士论文 作者: 分支:groovy-devel 指数 一、简介 2.编译运行 2.1. 依赖关系 2.2. 编译 2.3 运行 Doxygen 文档 更多信息 介绍 该存储库包含为学士论文开发的软件。 它是一种...