用Groovy思考 第一章 用Groovy简化Java代码

简介: 1. Groovy的安装 目前Groovy的最新版本为2.1.2版,下载地址为:http://groovy.codehaus.org/Download下载后解压groovy-binary-2.1.2.zip到某个目录,然后设置GROOVY_HOME环境变量指向Groovy的解压目录。

1. Groovy的安装

目前Groovy的最新版本为2.1.2版,下载地址为: http://groovy.codehaus.org/Download

下载后解压groovy-binary-2.1.2.zip到某个目录,然后设置GROOVY_HOME环境变量指向Groovy的解压目录。

再设置PATH环境变量,添加%GROOVY_HOME%\bin。

要验证以上安装是否正确,在命令行方式,执行:
[java]   view plain copy print ?
  1. >groovy -v  
  2. Groovy Version: 2.1.2 JVM: 1.7.0_09 Vendor: Oracle Corporation OS: Windows 7  

表示Groovy安装成功。

2. Groovy的第一个例子

我们先写一个Java类Todo.java,内容如下:
[java]   view plain copy print ?
  1. import java.util.List;  
  2. import java.util.ArrayList;  
  3.   
  4.   
  5. public class Todo{  
  6.     private String name;  
  7.     private String note;  
  8.   
  9.   
  10.     public Todo(){}  
  11.   
  12.   
  13.     public Todo(String name, String note){  
  14.         this.name = name;  
  15.         this.note = note;  
  16.     }  
  17.   
  18.   
  19.     public String getName(){  
  20.         return name;  
  21.     }  
  22.   
  23.   
  24.     public void setName(String name){  
  25.         this.name = name;  
  26.     }  
  27.   
  28.   
  29.     public String getNote(){  
  30.         return note;  
  31.     }  
  32.   
  33.   
  34.     public void setNote(String note){  
  35.         this.note = note;  
  36.     }  
  37.   
  38.   
  39.     public static void main(String[] args){  
  40.         List todos = new ArrayList();  
  41.         todos.add(new Todo("1""one"));  
  42.         todos.add(new Todo("2""two"));  
  43.         todos.add(new Todo("3""three"));  
  44.   
  45.   
  46.         for(Todo todo : todos){  
  47.             System.out.println(todo.getName() + " " + todo.getNote());  
  48.         }  
  49.     }  
  50. }  

我们用javac编译它,用java运行它,一切正常。现在,我们把Todo.java改名为Todo.groovy,然后执行:
[java]   view plain copy print ?
  1. > groovy Todo.groovy  

我们会惊异地发现,与Java的执行结果一样。

结论:Groovy是兼容Java的。

运行Java持续有两步:用javac编译类文件,然后用java在JVM上执行编译后的字节码文件。
而Groovy是在运行时编译字节码文件,在开发中节省了编译这个步骤。


3. 用Groovy简化Java代码

下面,我们用Groovy简化JavaBean为GroovyBean。
[java]   view plain copy print ?
  1. import java.util.List;  
  2. import java.util.ArrayList;  
  3.   
  4.   
  5. public class Todo{  
  6.     String name;  
  7.     String note;  
  8.   
  9.   
  10.     public static void main(String[] args){  
  11.         List todos = new ArrayList();  
  12.         todos.add(new Todo(name:"1", note:"one"));  
  13.         todos.add(new Todo(name:"2", note:"two"));  
  14.         todos.add(new Todo(name:"3", note:"three"));  
  15.   
  16.   
  17.         for(Todo todo : todos){  
  18.             System.out.println(todo.name + " " + todo.note);  
  19.         }  
  20.     }  
  21. }  

执行结果仍然一样。

可见,
1)省略了JavaBean的getter和setter方法;
2)默认情况,所有的类属性都是public的;
3)构造函数很有特色,Map方式。

4. 用Groovy再进一步简化代码

[java]   view plain copy print ?
  1. public class Todo{  
  2.     String name  
  3.     String note  
  4.   
  5.   
  6.     public static void main(String[] args){  
  7.         def todos = new ArrayList()  
  8.         todos.add(new Todo(name:"1", note:"one"))  
  9.         todos.add(new Todo(name:"2", note:"two"))  
  10.         todos.add(new Todo(name:"3", note:"three"))  
  11.         for(Todo todo : todos)  
  12.             println "${todo.name} ${todo.note}"  
  13.     }  
  14. }  

执行结果仍然一样。
可见,
1)List和ArrayList省略了类型;
2)省略了分号;
3)打印语句省略了System.out。

5. 用Groovy再进一步省略main()函数

[java]   view plain copy print ?
  1. public class Todo{  
  2.     String name  
  3.     String note  
  4. }  
  5. def todos = [  
  6.     new Todo(name:"1", note:"one"),  
  7.     new Todo(name:"2", note:"two"),  
  8.     new Todo(name:"3", note:"three")  
  9. ]  
  10. todos.each{  
  11.     println "${it.name} ${it.note}"  
  12. }  

此代码在groovyconsole控制台运行正常。

看了以上内容,你们对Groovy有什么看法?下一节我们将介绍Groovy语言的关键特征。

目录
相关文章
|
2天前
|
云安全 人工智能 自然语言处理
AI说的每一句话,都靠谱吗?
阿里云提供AI全栈安全能力,其中针对AI输入与输出环节的安全合规挑战,我们构建了“开箱即用”与“按需增强”相结合的多层次、可配置的内容安全机制。
|
9天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
4天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
412 185
|
2天前
|
数据采集 消息中间件 人工智能
跨系统数据搬运的全方位解析,包括定义、痛点、技术、方法及智能体解决方案
跨系统数据搬运打通企业数据孤岛,实现CRM、ERP等系统高效互通。伴随数字化转型,全球市场规模超150亿美元,中国年增速达30%。本文详解其定义、痛点、技术原理、主流方法及智能体新范式,结合实在Agent等案例,揭示从数据割裂到智能流通的实践路径,助力企业降本增效,释放数据价值。
|
8天前
|
人工智能 自然语言处理 安全
国内主流Agent工具功能全维度对比:从技术内核到场景落地,一篇读懂所有选择
2024年全球AI Agent市场规模达52.9亿美元,预计2030年将增长至471亿美元,亚太地区增速领先。国内Agent工具呈现“百花齐放”格局,涵盖政务、金融、电商等多场景。本文深入解析实在智能实在Agent等主流产品,在技术架构、任务规划、多模态交互、工具集成等方面进行全维度对比,结合市场反馈与行业趋势,为企业及个人用户提供科学选型指南,助力高效落地AI智能体应用。
|
4天前
|
消息中间件 安全 NoSQL
阿里云通过中国信通院首批安全可信中间件评估
近日,由中国信通院主办的 2025(第五届)数字化转型发展大会在京举行。会上,“阿里云应用服务器软件 AliEE”、“消息队列软件 RocketMQ”、“云数据库 Tair”三款产品成功通过中国信通院“安全可信中间件”系列评估,成为首批获此认证的中间件产品。此次评估覆盖安全可信要求、功能完备性、安全防护能力、性能表现、可靠性与可维护性等核心指标,标志着阿里云中间件产品在多架构适配与安全能力上达到行业领先水平。
310 193