10、闭包(Closure)
闭包是用中括号括起来的代码块,可以被单独调用或运行,也可以被命名
l 闭包常用于对集合进行迭代:
map.each {key,val -> println "$key:$val"} //key和val用于接收map每个元素的键和值
map.each { println it } //关键字it代表当前迭代map元素
map.each { println it.getKey()+"->"+it.getValue() }
l 除了迭代外,闭包还可以单独使用:
def say = {word ->
println word
}
say 'hello' //调用
say.call 'hello' //调用
实际上,闭包是个对象,可以作为参数传递,也和单独调用,甚至作为方法的返回值,有点像Java中的内部类。其作用和C++中的函数指针类似
注意:凡是几乎或一系列的内容,都可以使用each进行闭包迭代,包括Map、Collection、JDBC Rowset、File的行等等
11、类
你可以用标准Java Bean的语法来定义一个Groovy类。但是,我们完全可以用Groovy的方式定义和使用类,这样可以减少一半以上JavaBean的代码:
(1)不需要public修饰符
Groovy默认的访问方式就是public
(2)不需要类型说明
Groovy不关心变量和方法参数的类型
(3)不需要getter/setter方法
Public字段不需要提供getter/setter方法,因为Groovy在字节码中生成相应的getter/setter方法
(4)不需要构造方法
因为Groovy自动提供的构造方法已经够使用了。一个是无参构造函数,另一个是只有Map类型构造参数的构造方法(可以用它来初始化任何类成员字段)
(5)不需要return
Groovy不需要方法返回值(默认返回方法最后一条语句产生的值)
(6)方法调用可以不使用圆括号
构造方法除外
12、?运算符和*.运算符
l ?运算符
rs?.next()
和下面代码等价:
if(rs != null){
rs.next();
}
l *.运算符
用于对集合类型的对象的每个元素执行相同的方法,返回值为大小和该集合元素相同的List
def col = ['123','1','12345']
println col*.size()
13、 枚举(Enum)
l 简单的例子:
enum Day{
SUNDAY, MONDAY, TUESDAY,WEDNESDAY,
THURSDAY, FRIDAY,SATURDAY
}
def today = Day.SUNDAY
switch(today){
case [Day.SATURDAY,Day.SUNDAY]:
println 'Weekends'
break
case Day.MONDAY..Day.FRIDAY:
println 'Workdays'
break
default:
println 'Not a valid Day!'
}
注意,switch和case中可以使用任何对象,case中还可以使用List和“范围”
l Groovy支持带构造器、属性和方法的enum:
enum Planet{
MERCURY(3.303e+3, 2.4397e6),
VERNUS(4.869e24, 6.0518e6),
EARTH(5.869e24, 6.37814e6),
MARS(6.421e24, 3.3972e6),
JUPITER(1.9e27, 7.1492e6),
SATURN(5.688e26, 6.0268e6),
URANUS(8.686e25, 2.5559e7),
NEPTUNE(1.024e26, 2.4746e7)
double mass
double radius
Planet(double mass, double radius){
this.mass = mass;
this.radius = radius
}
void printMe(){
println "${name()} has a mass of ${mass}"+
" and a radius of ${radius}"
}
}
Planet.EARTH.printMe()
14、Elvis操作符
Elvis是三目运算符“?:”的简称。
l 三目运算符通常以以下形式出现:
String displayName = name!=null?name:"Unknown"
l 在Groovy中,可以简化为下面写法:(因为在Groovy中,null可以转换为false)
String displayName = name?name:"Unknown"
l 基于“不重复”原则,Elvis可以再次简化为:
String displayName = name?:"Unknown"
15、动态性
Groovy所有的对象都有一个元类metaClass,可以通过对象的metaClass属性访问该元类,我们可以通过元类向对象动态添加方法,查看对象的属性和方法(反射)
l 动态添加一个方法:
def msg = "hello"
msg.metaClass.up = {msg.toUpperCase()}
l 打印所有属性和方法:
msg.metaClass.metaMethods.each { println it }
msg.metaClass.properties.each { println it }
l 查找属性和方法:
if( msg.metaClass.respondsTo (msg, "up")){
println msg.up()
}
if( msg.metaClass.hasProperty(msg,"bytes")){
println msg.bytes.encodeBase64()
}
单元测试
利用JUnit可以用两种方式对Groovy进行单元测试
被测试的Groovy类,代码如下:
class Person {
def Name
def Age
@Override
public String toString() {
"Name:${Name}, Age:${Age}"
}
}
l 方式一:使用JUnit TestCase(Java类)
实际上是对Java class(字节码)进行的测试,代码如下:
import org.junit.Test;
public class JavaTestPerson {
@Test
public void test(){
Person p = new Person();
p.setName("Name");
p.setAge(1);
System.out.println(p);
}
}
l 方式二:使用Groovy类进行测试
import org.junit.Test
class GroovyTestPerson {
@Test
public void test(){
Person p = new Person(Name:"name",Age:1)
println p
}
}
相关推荐
在《Groovy学习笔记》这本书中,你可能会学到如何快速入门Groovy,理解其基本语法,包括变量、控制流、类和对象的创建,以及如何利用Groovy的特性来提高开发效率。此外,书中可能还会涵盖Groovy在实际项目中的应用,...
3. **Groovy Shell和GroovyConsole**: 这两个工具是学习和测试Groovy代码的好帮手,可以快速尝试和验证代码片段。 4. **GString**: Groovy的字符串支持模板语法,可以方便地进行字符串格式化,如`"Hello, ${name}"`...
Groovy是一种动态、灵活的编程语言,它是Java平台上的一个主要补充,特别是在脚本编写和快速原型设计方面表现突出。...这份"Groovy学习笔记.pdf"应该会提供一个良好的起点,帮助你踏上Groovy的学习之旅。
### Groovy学习笔记知识点梳理 #### 一、Groovy简介 - **概念**:Groovy是一种灵活的脚本语言,其设计初衷是为了更好地服务于Java开发者。它具备许多现代动态语言的特点,比如Python和Ruby,同时又能够无缝地与Java...
以下是对Groovy学习笔记各章节的详细解释: ### 第1章:数字和字符串 在Groovy中,所有的数字都是Object类型的,这意味着你可以在对象上调用方法。例如,你可以直接在数字上使用加减乘除等运算符,如`12 + 8`。...
### Groovy 快速入门指南知识点详解 #### 一、集合操作 Groovy 提供了对集合的强大支持,包括 `List` 和 `Map` 的多种操作方式。 **1. List** - **定义与访问** - Groovy 中的 `List` 可以包含不同类型的元素。...
通过阅读文章《Groovy学习笔记 Struts2集成--Groovy类作为Action》,你可以更深入地了解如何在实际项目中利用Groovy的特性来优化Struts2应用。提供的压缩包文件`struts2-groovy-plugin`可能包含了Struts2 Groovy插件...
GROOVY入门经典GROOVY入门经典GROOVY入门经典GROOVY入门经典
Groovy快速入门.pptx于Groovy的传说有很多,最近也越来越热,有人甚至说Groovy 是 JVM 的一个替代语言。我列几点特性,大家自己判断:是一个基于Java虚拟机的敏捷动态语言。它构建在强大的Java语言之上并添加了从...
Groovy 入门教程 Groovy 是一种基于 Java 语言的脚本语言,运行在 JVM 中,语法与 Java 相似,但抛弃了 Java 的一些烦琐的语法规则,提供了更加简洁和灵活的编程体验。 Groovy 的特点 1. 简洁的语法:Groovy 语法...
- **闭包**:Groovy的闭包是其强大功能之一,它允许你定义可重用的代码块,可以作为参数传递,也可以作为返回值。 - **元编程**:Groovy的元编程能力让你可以在运行时修改或扩展类的行为。 - **GString**:...
在本文中,我们将深入探讨Groovy的基础知识,包括语法特性、面向对象编程、脚本使用以及与其他Java技术的集成,以帮助初学者快速入门。 1. **Groovy语法简介** - Groovy的语法简洁且易于理解,它融合了多种语言的...
Groovy_in_Action.pdf Groovy经典入门.pdf 使用Grails快速开发Web应用.pdf 在Eclipse里使用Grails类创建工具.pdf Programming Groovy. Dynamic Productivity for the Java Developer.pdf等一系列groovy资源
这两份文档将为你提供一个全面的Gails和Groovy学习路径,帮助你快速掌握这两个工具,从而高效地开发Java平台上的Web应用。通过深入实践,你将能够充分利用Gails的灵活性和Groovy的简洁性,打造出高效、易维护的应用...
适合想了解groovy 编程开发的人员 Groovy - hellworld Groovy - 变量 Groovy - 静态import Groovy - 字符串 Groovy - 分支结构语句 Groovy - 循环结构语句
语言程序设计资料:Groovy_快速入门.doc
Groovy是一种动态、灵活的编程语言,它是Java平台上的一个扩展,可以无缝集成到Java项目中。...通过阅读《Groovy经典入门》这本书和实践其中的示例,你可以快速掌握Groovy语言并开始利用其强大的功能。