`
rsljdkt
  • 浏览: 454383 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Groovy学习笔记之快速入门篇(二)

阅读更多

10、闭包(Closure

闭包是用中括号括起来的代码块,可以被单独调用或运行,也可以被命名

闭包常用于对集合进行迭代:

map.each {key,val -> println "$key:$val"} //key和val用于接收map每个元素的键和值

map.each { println it } //关键字it代表当前迭代map元素

map.each { println it.getKey()+"->"+it.getValue() }

除了迭代外,闭包还可以单独使用:

def say = {word ->

println word

}

say 'hello' //调用

say.call 'hello' //调用

实际上,闭包是个对象,可以作为参数传递,也和单独调用,甚至作为方法的返回值,有点像Java中的内部类。其作用和C++中的函数指针类似

注意:凡是几乎或一系列的内容,都可以使用each进行闭包迭代,包括MapCollectionJDBC RowsetFile的行等等

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、?运算符和*.运算符

?运算符

rs?.next()

和下面代码等价:

if(rs != null){

rs.next();

}

*.运算符

用于对集合类型的对象的每个元素执行相同的方法,返回值为大小和该集合元素相同的List

def col = ['123','1','12345']

println col*.size() 

13、 枚举(Enum

简单的例子:

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!'

}

注意,switchcase中可以使用任何对象,case中还可以使用List和“范围”

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是三目运算符“?:”的简称。

三目运算符通常以以下形式出现:

String displayName = name!=null?name:"Unknown"

Groovy中,可以简化为下面写法:(因为在Groovy中,null可以转换为false

String displayName = name?name:"Unknown"

基于“不重复”原则,Elvis可以再次简化为:

String displayName = name?:"Unknown"

15、动态性

Groovy所有的对象都有一个元类metaClass,可以通过对象的metaClass属性访问该元类,我们可以通过元类向对象动态添加方法,查看对象的属性和方法(反射)

动态添加一个方法:

def msg = "hello"

msg.metaClass.up = {msg.toUpperCase()}

打印所有属性和方法:

msg.metaClass.metaMethods.each { println it }

msg.metaClass.properties.each { println it }

查找属性和方法:

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}"

}

}

方式一:使用JUnit TestCaseJava类)

实际上是对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);

}

}

方式二:使用Groovy类进行测试

import org.junit.Test

 

class GroovyTestPerson {

@Test

public void test(){

Person p = new Person(Name:"name",Age:1)

println p

}

}

<!--EndFragment-->

0
2
分享到:
评论

相关推荐

    Groovy学习笔记 PDF版

    在《Groovy学习笔记》这本书中,你可能会学到如何快速入门Groovy,理解其基本语法,包括变量、控制流、类和对象的创建,以及如何利用Groovy的特性来提高开发效率。此外,书中可能还会涵盖Groovy在实际项目中的应用,...

    Groovy 学习笔记

    3. **Groovy Shell和GroovyConsole**: 这两个工具是学习和测试Groovy代码的好帮手,可以快速尝试和验证代码片段。 4. **GString**: Groovy的字符串支持模板语法,可以方便地进行字符串格式化,如`"Hello, ${name}"`...

    Groovy学习笔记.pdf

    Groovy是一种动态、灵活的编程语言,它是Java平台上的一个主要补充,特别是在脚本编写和快速原型设计方面表现突出。...这份"Groovy学习笔记.pdf"应该会提供一个良好的起点,帮助你踏上Groovy的学习之旅。

    Groovy学习笔记

    ### Groovy学习笔记知识点梳理 #### 一、Groovy简介 - **概念**:Groovy是一种灵活的脚本语言,其设计初衷是为了更好地服务于Java开发者。它具备许多现代动态语言的特点,比如Python和Ruby,同时又能够无缝地与Java...

    groovy学习笔记

    以下是对Groovy学习笔记各章节的详细解释: ### 第1章:数字和字符串 在Groovy中,所有的数字都是Object类型的,这意味着你可以在对象上调用方法。例如,你可以直接在数字上使用加减乘除等运算符,如`12 + 8`。...

    groovy快速入门指南(中文)

    ### Groovy 快速入门指南知识点详解 #### 一、集合操作 Groovy 提供了对集合的强大支持,包括 `List` 和 `Map` 的多种操作方式。 **1. List** - **定义与访问** - Groovy 中的 `List` 可以包含不同类型的元素。...

    Groovy学习笔记 Struts2集成--Groovy类作为Action

    通过阅读文章《Groovy学习笔记 Struts2集成--Groovy类作为Action》,你可以更深入地了解如何在实际项目中利用Groovy的特性来优化Struts2应用。提供的压缩包文件`struts2-groovy-plugin`可能包含了Struts2 Groovy插件...

    GROOVY入门经典.pdf

    GROOVY入门经典GROOVY入门经典GROOVY入门经典GROOVY入门经典

    Groovy快速入门.pptx

    Groovy快速入门.pptx于Groovy的传说有很多,最近也越来越热,有人甚至说Groovy 是 JVM 的一个替代语言。我列几点特性,大家自己判断:是一个基于Java虚拟机的敏捷动态语言。它构建在强大的Java语言之上并添加了从...

    Groovy入门教程[参照].pdf

    Groovy 入门教程 Groovy 是一种基于 Java 语言的脚本语言,运行在 JVM 中,语法与 Java 相似,但抛弃了 Java 的一些烦琐的语法规则,提供了更加简洁和灵活的编程体验。 Groovy 的特点 1. 简洁的语法:Groovy 语法...

    Groovy 学习资料

    - **闭包**:Groovy的闭包是其强大功能之一,它允许你定义可重用的代码块,可以作为参数传递,也可以作为返回值。 - **元编程**:Groovy的元编程能力让你可以在运行时修改或扩展类的行为。 - **GString**:...

    groovy 经典入门 通俗易懂

    在本文中,我们将深入探讨Groovy的基础知识,包括语法特性、面向对象编程、脚本使用以及与其他Java技术的集成,以帮助初学者快速入门。 1. **Groovy语法简介** - Groovy的语法简洁且易于理解,它融合了多种语言的...

    Groovy_in_Action Groovy经典入门 使用Grails快速开发Web应用

    Groovy_in_Action.pdf Groovy经典入门.pdf 使用Grails快速开发Web应用.pdf 在Eclipse里使用Grails类创建工具.pdf Programming Groovy. Dynamic Productivity for the Java Developer.pdf等一系列groovy资源

    Gails入门指南(中文) + Groovy快速入门(中文)

    这两份文档将为你提供一个全面的Gails和Groovy学习路径,帮助你快速掌握这两个工具,从而高效地开发Java平台上的Web应用。通过深入实践,你将能够充分利用Gails的灵活性和Groovy的简洁性,打造出高效、易维护的应用...

    Groovy 入门学习

    适合想了解groovy 编程开发的人员 Groovy - hellworld Groovy - 变量 Groovy - 静态import Groovy - 字符串 Groovy - 分支结构语句 Groovy - 循环结构语句

    语言程序设计资料:Groovy_快速入门.doc

    语言程序设计资料:Groovy_快速入门.doc

    groovy入门经典,groovyeclipse 插件

    Groovy是一种动态、灵活的编程语言,它是Java平台上的一个扩展,可以无缝集成到Java项目中。...通过阅读《Groovy经典入门》这本书和实践其中的示例,你可以快速掌握Groovy语言并开始利用其强大的功能。

Global site tag (gtag.js) - Google Analytics